获取字符串

时间:2015-10-04 17:26:28

标签: string julia

当我运行此代码时输出为("",""),但它应该是("我"," 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

2 个答案:

答案 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 ,则此功能不起作用。你怎么能为这种情况修改它?