2015-10-04 91 views
0

當我運行此代碼時,輸​​出是(「」,「」),但它應該是(「I」,「love」)!!!,並且沒有錯誤。我應該怎麼做才能解決它?獲取字符串的最大和最小單詞

仙=「我喜歡狗」

function Longest_word(sen) 
    x=" " 

    maxw=" " 

    minw=" " 

    minl=1 

    maxl=length(sen) 

    p=0 

    for i=1:length(sen) 

    if(sen[i]!=" ") 
     x=[x[1]...,sen[i]...] 
    else 
     p=length(x) 

     if p<min1 

     minl=p 
     minw=x 
     end 

     if p>maxl 
     maxl=p 
     maxw=x 
     end 
     x=" " 
    end 
    end 


    return minw,maxw 

end 
+0

這裏有什麼你的問題? – m02ph3u5

+3

「min1」是否正確? – daycaster

+1

我認爲你可以做得更好... –

回答

3

代碼的想法是好的,但也有一些錯誤。 你可以通過調試一下來看看出了什麼問題。最簡單的方法是使用@show,它打印出變量的值。當代碼不能像你期望的那樣工作時,這是第一件要做的事情 - 只要將所有內容打印出來,問問它在做什麼!

例如如果你把

if(sen[i]!=" ") 
    x=[x[1]...,sen[i]...] 
    @show x 

Longest_word("I love dogs") 

運行功能,你會看到,它不是做你想要它做的,這(我相信)是新增的第i個字母的字符串什麼X。

注意,像仙[I]訪問第i個字母是字符不是。 ,您可以嘗試與

string(sen[i]) 

轉換爲字符串,但是這給了一個Unicode字符串,而不是ASCII字符串,在最新版本的朱莉婭。

事實上,這將是最好不要使用

for i in 1:length(sen) 

遍歷字符串,但該字符串中的字符迭代(這也將工作,如果字符串是Unicode):

for c in sen 

然後你就可以初始化字符串x作爲

x = UTF8String("") 

x = string(x, c) 

更新嘗試一些這樣的可能性,看看他們的幫助。

此外,你最初有maxl和minl定義錯誤 - 它們應該是相反的。而且,這些變量的名稱對於理解應該發生的事情並不是很有幫助。並且字符串應該被初始化爲空的字符串,"",不是帶空格的字符串," "

@daycaster是正確的,似乎有一個min1應該是minl

但是,事實上有一個更簡單的方法來解決問題,使用split函數,它將字符串分成單詞。

讓我們知道你是否仍然有問題。

這是按照你的想法工作版本:

function longest_word(sentence) 
    x = UTF8String("") 

    maxw = "" 
    minw = "" 

    maxl = 0  # counterintuitive! start the "wrong" way round 
    minl = length(sentence) 

    for i in 1:length(sentence)   # or: for c in sentence 

     if sentence[i] != ' '   # or: if c != ' ' 
      x = string(x, sentence[i]) # or: x = string(x, c) 

     else 

      p = length(x) 

      if p < minl 
       minl = p 
       minw = x 
      end 

      if p > maxl 
       maxl = p 
       maxw = x 
      end 

      x = "" 
     end 
    end 

    return minw, maxw 

end 

注意,如果最長的詞是在字符串的結束功能不起作用。你怎麼能修改它的這種情況?

+1

幹得好!你可以鼓勵海報觀看你的一些很酷的視頻...... :) – daycaster

4

正如@大衛提到,另一個,可能是更好的解決方案可以通過使用split功能來實現:

function longest_word(sentence) 
    sp=split(sentence) 
    len=map(length,sp) 
    return (sp[indmin(len)],sp[indmax(len)]) 
end 
相關問題