So che vuoi scrivere un ciclo per rimuovere più spazi tra le parole, ma il modo migliore per rimuovere lo spazio bianco nel tuo particolare problema sarebbe quello di utilizzare regular expressions, in particolare con regexprep
. Le espressioni regolari vengono utilizzate per cercare particolari pattern/sottostringhe all'interno di una stringa più grande. In questo caso, ciò che stiamo cercando di trovare sono sottostringhe che consistono in più di uno spazio bianco. regexprep
trova le sottostringhe che corrispondono a un motivo e le sostituisce con un'altra stringa. Nel nostro caso, dovresti cercare sottostringhe all'interno della stringa che contengono almeno un altro carattere di spazi bianchi e sostituirle con un singolo carattere di spaziatura. Inoltre, vedo che hai tagliato gli spazi bianchi iniziali e finali per la stringa usando strtrim
, che è ottimo. Ora, tutto quello che dovete fare è chiamare regexprep
in questo modo:
Word = regexprep(Word, '\s+', ' ');
\s+
è l'espressione regolare per trovare almeno un carattere di spazio bianco. Quindi sostituiamo questo con un singolo spazio bianco. Come tale, supponendo che avevamo questa stringa memorizzata in Word
:
Word = ' hello how are you ';
Facendo un assetto di spazi iniziali e finali, quindi chiamando regexprep
nel modo di cui abbiamo parlato in tal modo dà:
Word = strtrim(Word);
Word = regexprep(Word, '\s+', ' ')
Word =
hello how are you
come si può vedere, lo spazio bianco iniziale e finale è stato rimosso con strtrim
e l'espressione regolare si occupa del resto degli spazi in mezzo.
Tuttavia, se siete morti insieme sull'utilizzo di un ciclo, che cosa si può fare è utilizzare una variabile logical
che è impostato per true
quando rileviamo uno spazio bianco, e poi utilizzare questa variabile e saltare altro bianco spazio caratteri fino a colpiamo un personaggio che non è uno spazio. Inseriremmo quindi il nostro spazio, quindi /
, quindi lo spazio, quindi continueremo. In altre parole, fare qualcosa di simile:
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
...
...
Quello che il codice di cui sopra non è che abbiamo una stringa vuota chiamata Word_noSpace
che conterrà la nostra parola senza spazi aggiuntivi, e quegli spazi sostituito con un singolo spazio bianco. Il loop passa attraverso ogni personaggio, e se dovessimo incontrare uno spazio, controlleremo se abbiamo già incontrato uno spazio. Se lo abbiamo, continua semplicemente nel ciclo. Se non lo abbiamo, quindi concatenare uno spazio bianco. Quando finalmente colpiamo un personaggio non spaziale, semplicemente aggiungiamo quei caratteri che non sono spazi per questa nuova stringa. Il risultato sarà una stringa senza spazi aggiuntivi, che verranno sostituiti con un singolo spazio bianco.
L'esecuzione del codice di cui sopra dopo si taglia la testa e di coda lo spazio bianco in tal modo dà:
Word =
hello how are you
[Questo esempio traduttore] (http://morsecode.scphillips.com/jtranslator.html) sembra formattare la Morse nello stesso modo in cui vuoi. – horchler