2014-12-14 22 views
5

Metni morsecode'a dönüştürmek için bir komut dosyası hazırladım ve şimdi sözcükler arasında bir eğik çizgi ekleyerek değiştirmek istiyorum. Morscode sözcükleri arasındaki boşluk eğik alanı gibi bir şey. Ben ana döngü önce benim döngü yanlış olduğunu biliyorum ve ben sadece gerçekten yardıma ihtiyacı önce belirtildiği gibi bunu yapmak düzeltmek istiyorum Teşekkür !!!:Dize, matlab arasındaki boşluklar nasıl kaldırılır?

... 

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

[Bu örnek, çevirmen] (http://morsecode.scphillips.com/jtranslator.html) biçimlendirmek görünmektedir Morse, istediğin gibi. – horchler

cevap

6

Ben Birden kaldırmak için bir döngü yazmak istiyorum biliyorum kelimeler arasındaki boşluklar, ancak özel probleminizdeki beyaz alanı kaldırmanın en iyi yolu, regular expressions'u özellikle regexprep ile kullanmak olacaktır. Düzenli ifadeler, daha geniş bir dize içinde belirli kalıpları/alt dizeleri aramak için kullanılır. Bu durumda, bulmaya çalıştığımız şey birden fazla boşluktan oluşan alt dizelerdir. regexprep, bir desenle eşleşen alt dizeleri bulur ve bunları başka bir dizeyle değiştirir. Bizim durumumuzda, dizinizdeki en az bir tane daha fazla boşluk karakteri içeren tüm alt dizeleri arar ve bunları tek bir boşluk karakteri ile değiştirirsiniz. Ayrıca, strtrim kullanarak ip için hem önde hem de boşluk boşluklarını kırptığınızı görüyorum, bu harika. Şimdi yapmanız gereken tüm şöyle çağrı regexprep geçerli:

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

\s+en az bir boşluk karakteri bulmak için düzenli ifadedir. Daha sonra bunu tek bir boşlukla değiştiriyoruz. Bu nedenle, bu dize Word sakladığı varsayarsak:

Word = ' hello how are you '; 

lider ve sondaki boşluk, o zaman bu şekilde anlattı şekilde regexprep çağıran bir giydirme yapmak verir: As you can

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

Word = 

hello how are you 

bakın, önde gelen ve sondaki beyaz boşluk strtrim ile kaldırıldı ve düzenli ifade aradaki boşlukların geri kalanıyla ilgileniyor. Eğer bir döngü kullanarak ölü seti ise


Ancak, ne yapabiliriz biz beyaz bir boşluk tespit ettiğimizde true için ayarlanmış bir logical değişken kullanın, sonra biz bu değişkeni kullanan ve beyaz diğer atlamak boşluk karakterleri 'a kadar boşluk olmayan bir karaktere sahibiz. Daha sonra uzayımızı yerleştiririz, daha sonra /, sonra boşluk yaparız, sonra devam ederiz.

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

Ne Yukarıdaki kod yapar biz fazladan boşluk bırakmadan bizim kelimesini içeren edecektir Word_noSpace denilen boş bir dize var ve bu boşluk tek boşluk ile değiştirilir olmasıdır: Başka bir deyişle, böyle bir şey yapmak. Döngü her karakterden geçer ve bir boşlukla karşılaşırsak, bir boşlukla karşılaşıp karşılaşmadığımızı kontrol ederiz. Eğer varsa, sadece döngüye devam edin. Eğer yapmamışsak, o zaman bir boşlukla birleştirin. Sonunda boşluk olmayan bir karaktere bastığımızda, sadece bu yeni dize boşluk olmayan karakterleri ekliyoruz. Sonuç ekstra boşluk olmayan bir dizge olacak ve bunlar tek bir beyaz alanla değiştirilecek.

götüren Döşeme sonra yukarıdaki kod çalıştırma ve böylece boşluk sondaki verir:

Word = 

hello how are you 
İlgili konular