wiem, że chcesz napisać pętlę do usuwania wielokrotność spacje między wyrazami, ale najlepszym sposobem na usunięcie białej przestrzeni w konkretnym problemie byłoby użycie regular expressions, szczególnie z regexprep
. Wyrażenia regularne są używane do wyszukiwania określonych wzorów/podciągów w większym ciągu. W tym przypadku staramy się znaleźć podciągi składające się z więcej niż jednego spacji. regexprep
znajduje podciągi pasujące do wzorca i zastępuje je innym ciągiem. W naszym przypadku będziesz szukał dowolnych podłańcuchów w ciągu znaków, które zawierają co najmniej jeszcze jeden znak białej spacji i zastąpi je pojedynczym znakiem odstępu. Ponadto widzę, że przycinałeś zarówno początkowe, jak i końcowe białe znaki ciągu znaków, używając strtrim
, co jest świetne. Teraz wszystko, co musisz zrobić, to zadzwonić regexprep
tak:
Word = regexprep(Word, '\s+', ' ');
\s+
jest wyrażenie regularne do znalezienia przynajmniej jeden znak białej przestrzeni. Następnie zastępujemy to pojedynczym odstępem. Jako takie, mniemając, mieliśmy ten ciąg przechowywane w Word
:
Word = ' hello how are you ';
Doing trym początkowe i końcowe białe znaki, a następnie wywołanie regexprep
w drodze rozmawialiśmy o tym samym daje:
Word = strtrim(Word);
Word = regexprep(Word, '\s+', ' ')
Word =
hello how are you
jak można zobacz, wiodąca i końcowa biała przestrzeń została usunięta przy pomocy strtrim
, a wyrażenie regularne zajmuje się resztą spacji pomiędzy nimi.
Jednakże, jeśli jesteś martwy ustawiony na za pomocą pętli, co można zrobić, to użyć logical
zmienną, która jest nastawiona na true
kiedy wykryje białą przestrzeń, a potem użyć tej zmiennej i pominąć inne białe znaki kosmiczne do trafiamy postać, która nie jest spacją. Następnie umieszczamy naszą przestrzeń, następnie /
, następnie spację, a następnie kontynuujemy.
Word = strtrim(Word); %// Remove leading and trailing whitespace
space_hit = false; %// Initialize space encountered flag
Word_noSpace = []; %// Will store our new string
for index=1:length(Word) %// For each character in our word
if Word(index) == ' ' %// If we hit a space
if space_hit %// Check to see if we have already hit a space
continue; %// Continue if we have
else
Word_noSpace = [Word_noSpace ' ']; %// If not, add a space, then set the flag
space_hit = true;
end
else
space_hit = false; %// When we finally hit a non-space, set back to false
Word_noSpace = [Word_noSpace Word(index)]; %// Keep appending characters
end
end
Word = Word_noSpace; %// Replace to make compatible with the rest of your code
for Character = Word %// Your code begins here
...
...
Co powyższy kod robi to, że mamy pusty ciąg o nazwie Word_noSpace
, który będzie zawierał nasze słowo bez spacji i zastąpione to pomieszczenia z jednym spacji: innymi słowy, coś takiego zrobić. Pętla przechodzi przez każdą postać, a gdy natkniemy się na spację, sprawdzamy, czy już natrafiliśmy na spację. Jeśli tak, po prostu kontynuuj w pętli. Jeśli nie, połączmy białą przestrzeń. Kiedy w końcu trafimy na znak spoza przestrzeni, po prostu dodajemy te znaki, które nie są spacjami do tego nowego ciągu. Wynikiem będzie ciąg bez dodatkowych spacji, a te zostaną zastąpione pojedynczą białą spacją.
Running powyższy kod po przycinać początkowe i końcowe spacje w ten sposób otrzymujemy:
Word =
hello how are you
[Przykład ten tłumacz] (http://morsecode.scphillips.com/jtranslator.html) wydaje się sformatować Morse w taki sam sposób, w jaki chcesz. – horchler