代碼的想法是好的,但也有一些錯誤。 你可以通過調試一下來看看出了什麼問題。最簡單的方法是使用@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
注意,如果最長的詞是在字符串的結束這功能不起作用。你怎麼能修改它的這種情況?
這裏有什麼你的問題? – m02ph3u5
「min1」是否正確? – daycaster
我認爲你可以做得更好... –