2014-12-14 21 views
5

Ho creato uno script per convertire il testo in morsecode, e ora voglio modificarlo per includere una barra tra le parole. Quindi qualcosa come spazio barra spazio tra le parole morsecode. So che il mio ciclo prima che il ciclo principale non è corretta e voglio risolvere il problema di fare come detto prima ho davvero bisogno di aiuto Grazie !!!:Come rimuovere spazi aggiuntivi tra le stringhe, 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

[Questo esempio traduttore] (http://morsecode.scphillips.com/jtranslator.html) sembra formattare la Morse nello stesso modo in cui vuoi. – horchler

risposta

6

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 
Problemi correlati