2014-09-24 106 views
0
myStr = ['what ' 'am I' 'doing with my life?'];  
wordLength = [4 2 1 5 4 2 4];  
startPos = [1 6 9 11 17 22 25] 

for i = ____________________ 

disp(_________________) 

end 

問題是我必須填充這些空白,以便在循環的每次迭代中只打印字符串中的一個單詞。我試過i = 1:7,以及disp(myStr),但它只打印了7次字符串。如何循環和訪問矩陣中的元素?

如何正確地做到這一點?

+2

你或許應該有一個基本的MATLAB教程首先啓動,對於爲例https://www.mathworks.co.uk/academia/student_center/tutorials/register.html – am304 2014-09-24 14:59:04

+0

[循環](HTTP:// WWW .mathworks.com/help/matlab/matlab_prog/loop-control-statements.html)和[「Array」(Matrix)](http://www.mathworks.com/help/matlab/math/matrix-indexing.html ) – 2014-09-24 15:24:47

回答

0

for循環的事情是您需要使用循環索引。循環索引是一個變量,每當您的循環即將開始時都會更新。 for循環的工作原理是,您有一個包含在for循環中的代碼體,該代碼體執行預定的時間量。用於for環路的通常格式如下:

for idx = array 
    ... %// BODY 
    ... 
end 

for循環體中的代碼獲取多次在array陣列的長度來執行。另外,idx是我在談論的循環索引。具體而言,for循環首次執行時,idx將等於array的第一個元素。第二次執行for循環時,idx將等於array等的第二個元素。因此,你可以這樣做很簡單:

for idx = 1 : 7 
    disp(idx) 
end 

for循環將執行使得它第一次執行bodyidx = 1代碼,第二次體代碼執行,​​,直到最後一個元素是idx = 7。因此,上面的代碼就相當於:

disp(1) 
disp(2) 
disp(3) 
disp(4) 
disp(5) 
disp(6) 
disp(7) 

而不是寫7條語句,你for循環模擬了相同的行爲。它顯然看起來更清潔。


您需要知道的最後一件事是如何索引到數組中。我不會詳細介紹它,因爲這些評論會給你一些關於如何做的很好的教程,但將數組看作一堆放置在一起的插槽。每個插槽都會放些東西。在這種情況下,myStr將包含一個字符串,其中每個插槽是單個字符。數組wordLength告訴你如何每個單詞是和startPos告訴你每個單詞開始的位置。

要訪問陣列中的一個元素,你會怎麼做:

myStr(k) 

k將是您要在陣列中訪問的位置。 k從1開始直到數組結束。訪問數組的另一個好方法是使用索引。基本上,您可以一次獲取大量值,而不是像上面那樣以單一方式訪問它們。具體來說,你可以這樣做:

myStr(first:last) 

first是你要訪問的last是您要訪問的最後一個值的起始位置。輸出將爲您提供一系列存儲在陣列中的值,這些值將從您需要的數組中捕獲firstlast的值。


因此,您必須使用for循環以及每個字符串的起始位置,以及每個串是爲了顯示完整的單詞有多長。換句話說,你需要這樣做:

for i = 1 : 7 
    disp(myStr(startPos(i):startPos(i)+wordLength(i))); 
end 

此外,一個小調。爲使此代碼正常工作,您的am I陣列中的I之後應該有一個空間。作爲這樣:

myStr = ['what ' 'am I ' 'doing with my life?']; 

在任何情況下,什麼上面的代碼的意思是,對於i1,2,3,4,5,6,7)的每個值,我們將要訪問陣列,使得在對於第i 起始位置單詞,我們捕捉到由這個詞的單詞長度決定的許多字符。假設我們的第一個單詞的開始位於我們數組的第3個位置,並且該單詞的長度爲5個字符(包括空格)。你會基本上是抓住從位置3個字符多達8的位置,因此你將基本上做到:

mystr(3:8) 

for循環基本上是這樣做的,但重複它在陣列中的每一個字。因此,這是我運行上面的代碼時得到的結果,注意到在am I字符串中添加空間的輕微修復。

what 
am 
I 
doing 
with 
my 
life? 
+0

謝謝!這非常有幫助。 – Manahil 2014-09-24 19:30:00

+0

@Manahil你非常歡迎。請考慮接受我的答案,如果它幫助:) – rayryeng 2014-09-24 19:31:32