2014-12-14 14 views
5

Stworzyłem skrypt do konwersji tekstu na kod Morsecode, a teraz chcę go zmodyfikować, aby zawierał ukośnik między wyrazami.Tak więc coś jak spacja przestrzeń między słowami Morsecode. Wiem, że moja pętla przed pętli głównej jest niepoprawna i chcę naprawić to zrobić jak stwierdzono wcześniej po prostu naprawdę potrzebują pomocy Dziękuję !!!:Jak usunąć dodatkowe spacje między stringami, matlab?

... 

Word=input('Please enter a word:','s'); 
    ... 
      Code=MC_1; 
    ... 

    case ' ' 
     Code='/' 
    otherwise 
     Valid=0; 
end 
if Valid 
     fprintf('%s ',Code); 
else 
     disp('Input has invalid characters!') 
     break 
end 
+0

[Przykład ten tłumacz] (http://morsecode.scphillips.com/jtranslator.html) wydaje się sformatować Morse w taki sam sposób, w jaki chcesz. – horchler

Odpowiedz

6

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 
Powiązane problemy