当我运行此代码时输出为("",""),但它应该是("我"," love& #34;)!!!,并且没有错误。我该怎么做才能解决它?
sen ="我爱狗"
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 :(得分:4)
正如@David所说,使用split
函数可以实现另一个更好的解决方案:
function longest_word(sentence)
sp=split(sentence)
len=map(length,sp)
return (sp[indmin(len)],sp[indmax(len)])
end
答案 1 :(得分:3)
您的代码的想法很好,但有一些错误。
你可以通过调试来看出出了什么问题。最简单的方法是使用@show
打印出变量的值。当代码不能像你期望的那样工作时,这是第一件要做的事情 - 只需通过打印出来就问它是做什么的!
E.g。如果你把
if(sen[i]!=" ")
x=[x[1]...,sen[i]...]
@show x
并使用
运行该功能Longest_word("I love dogs")
你会发现它没有做你想做的事情,我相信这是将第i个字母添加到字符串x。
请注意,像sen [i]一样访问的第i个字母是字符而不是字符串。 您可以尝试使用
将其转换为字符串string(sen[i])
但是在最近的Julia版本中,这给出了一个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
请注意,如果最长的单词位于字符串的 end ,则此功能不起作用。你怎么能为这种情况修改它?