String 在字符串中获取最大和最小的单词

String 在字符串中获取最大和最小的单词,string,julia,String,Julia,当我运行这些代码时,输出是(“,”),但是它应该是(“我”,“爱”)!!!,而且没有错误。我该怎么做才能修复它 sen=“我喜欢狗” 函数最长单词(sen) x=“” maxw=“” minw=“” minl=1 最大长度=长度(sen) p=0 对于i=1:长度(sen) if(sen[i]!=“”) x=[x[1]…,sen[i]…] 其他的 p=长度(x) 如果pmaxl maxl=p maxw=x 终止 x=“” 终止 终止 返回minw,maxw 终止 您的代码思想不错,但也有一些错误

当我运行这些代码时,输出是(“,”),但是它应该是(“我”,“爱”)!!!,而且没有错误。我该怎么做才能修复它

sen=“我喜欢狗”

函数最长单词(sen)
x=“”
maxw=“”
minw=“”
minl=1
最大长度=长度(sen)
p=0
对于i=1:长度(sen)
if(sen[i]!=“”)
x=[x[1]…,sen[i]…]
其他的
p=长度(x)
如果pmaxl
maxl=p
maxw=x
终止
x=“”
终止
终止
返回minw,maxw
终止

您的代码思想不错,但也有一些错误。 您可以通过调试一点来了解出了什么问题。最简单的方法是使用
@show
,它打印出变量的值。当代码不能像您期望的那样工作时,这是第一件要做的事情——只需通过打印所有内容来询问它在做什么

如果你把

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,这也会起作用):

然后您可以将字符串
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
函数最长的单词(句子)
x=UTF8String(“”)
maxw=“”
minw=“”
maxl=0#违反直觉!从“错误”的方向开始
minl=长度(句子)
对于1中的i:长度(句子)#或:对于句子中的c
如果句子[i]!=''或者:如果c!=''
x=字符串(x,句子[i])#或:x=字符串(x,c)
其他的
p=长度(x)
如果pmaxl
maxl=p
maxw=x
终止
x=“”
终止
终止
返回minw,maxw
终止

请注意,如果最长的单词位于字符串末尾,则此函数不起作用。对于这种情况,您如何修改它?

正如@David提到的,使用
split
功能可以实现另一种可能更好的解决方案:

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

你的问题是什么?对吗?我想你可以做得更好…嗨,塔格里德。我们很想帮助你,但你需要明确你的问题:你想做什么?你期望的行为是什么?什么不起作用?这样我们就能更好地帮助你。请看一些其他问题,看看它们是如何写的。干得好!你也可以鼓励海报观看一些你的酷视频…:)
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
function longest_word(sentence)
  sp=split(sentence)
  len=map(length,sp)
  return (sp[indmin(len)],sp[indmax(len)])
end