2014-12-14 27 views
5

Ich habe ein Skript erstellt, um Text in Morsecode zu konvertieren, und jetzt möchte ich es ändern, um einen Schrägstrich zwischen Wörtern zu enthalten.So etwas wie Leerzeichen zwischen Leerzeichen morsecode Wörter. Ich weiß, dass meine Schleife vor der Hauptschleife falsch ist, und ich möchte um es zu beheben, wie angegeben zu tun, bevor ich danken Ihnen nur wirklich Hilfe benötigen !!!:Wie entfernen Sie zusätzliche Leerzeichen zwischen String, 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

[Dieses Beispiel Übersetzer] (http://morsecode.scphillips.com/jtranslator.html) scheint das zu formatieren Morse so wie du willst. – horchler

Antwort

6

Ich weiß, Sie wollen eine Schleife schreiben mehrere entfernen Leerzeichen zwischen Wörtern, aber die beste Möglichkeit, Leerraum in Ihrem speziellen Problem zu entfernen, wäre die Verwendung regular expressions, speziell mit regexprep. Reguläre Ausdrücke werden verwendet, um nach bestimmten Mustern/Teilstrings innerhalb eines größeren Strings zu suchen. In diesem Fall suchen wir nach Teilstrings, die aus mehr als einem Leerzeichen bestehen. regexprep findet Teilstrings, die mit einem Muster übereinstimmen, und ersetzt sie durch eine andere Zeichenfolge. In unserem Fall würden Sie nach Teilzeichenfolgen innerhalb Ihrer Zeichenfolge suchen, die mindestens ein Leerzeichen mehr enthalten, und sie durch ein einzelnes Leerzeichen ersetzen. Außerdem sehe ich, dass Sie sowohl die führenden als auch die nachgestellten Leerzeichen für die Zeichenfolge mit strtrim abgeschnitten haben, was großartig ist. Nun, alles, was Sie tun müssen, ist Anruf regexprep wie so:

Word = regexprep(Word, '\s+', ' '); 

\s+ ist der reguläre Ausdruck für mindestens ein Raumzeichen finden. Wir ersetzen das dann durch einen einzelnen Whitespace. Als solches Gesetzt wir in Word diese Zeichenfolge gespeichert hatte:

Word = ' hello how are you '; 

Doing einen Beschnitt von Vorder- und Hinter Leerzeichen, dann regexprep in der Art und Weise rufen wir über so gesprochen gibt:

Word = strtrim(Word); 
Word = regexprep(Word, '\s+', ' ') 

Word = 

hello how are you 

Wie können Sie siehe, der führende und nachgestellte Leerraum wurde mit strtrim entfernt, und der reguläre Ausdruck kümmert sich um den Rest der Zwischenräume.


Wenn Sie jedoch auf der Verwendung einer Schleife tot eingestellt sind, können, was Sie tun, ist eine logical Variable verwenden, die auf true gesetzt wird, wenn wir einen weißen Raum erfassen, und dann verwenden wir diese Variable und überspringen andere weiß Leerzeichen Zeichen bis wir treffen einen Charakter, der kein Leerzeichen ist. Wir würden dann unseren Platz, dann /, dann Platz, dann weitermachen. Mit anderen Worten, etwas tun, wie folgt aus:

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 
    ... 
    ... 

Was die oben genannten Code tut, ist, dass wir einen leeren String genannt haben Word_noSpace, dass unser Wort ohne zusätzliche Leerzeichen, und diese Räume ersetzt mit einem einzigen Leerzeichen enthalten. Die Schleife durchläuft jedes Zeichen, und sollten wir auf ein Leerzeichen stoßen, prüfen wir, ob wir bereits ein Leerzeichen gefunden haben. Wenn wir haben, einfach weiter in der Schleife. Wenn nicht, verketten Sie einen Leerraum. Sobald wir schließlich ein Nicht-Leerzeichen-Zeichen treffen, fügen wir einfach nur die Zeichen hinzu, die nicht Leerzeichen für diese neue Zeichenfolge sind. Das Ergebnis ist eine Zeichenfolge ohne zusätzliche Leerzeichen, und diese werden durch ein einzelnes Leerzeichen ersetzt.

Ausführen des obigen Code, nachdem Sie die vorderen und hinteren Leerraum trimmen so gibt:

Word = 

hello how are you 
Verwandte Themen