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