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
[Dieses Beispiel Übersetzer] (http://morsecode.scphillips.com/jtranslator.html) scheint das zu formatieren Morse so wie du willst. – horchler