将两个字符串合并为一个字符串

时间:2019-08-25 21:08:19

标签: string julia

我是julia编程的新手,不知道我写的内容是否正确。

问题是我有两个字符串,第一个是“ dog”,第二个是“ fish”,因此这些字符串的合并应一个字符一个字符地完成,例如:“ dfoigsh”。

我正在尝试编写代码以合并两个字符串,但这不起作用:

str1 = "fuad"
str2 = "hesen"
result = ""
str = ""
merge = str1 * str2

if length(str1)>length(str2)
str= str1
else str=str2
end

for i = 1:length(merge)
        result[i]=str1[i] #fuad , hesenkl, result = fhueasdenkl
        result[j+1]=str2[j]
        j=j+1
        i=i+1
end
println(result)
println(str)

3 个答案:

答案 0 :(得分:3)

请注意,在Julia中,字符串是不可变的。因此,要合并它们,您必须像以前一样使用*运算符:

julia> str1 = "fuad"
"fuad"

julia> str2 = "hesen"
"hesen"

julia> merge = str1 * str2
"fuadhesen"

如果要练习遍历字符串,可以创建Vectorstr1中包含的str2个字符,然后使用转换为String join例如:

julia> res = Char[]
0-element Array{Char,1}

julia> for c in str1
           push!(res, c)
       end

julia> res
4-element Array{Char,1}:
 'f'
 'u'
 'a'
 'd'

julia> for c in str2
           push!(res, c)
       end

julia> res
9-element Array{Char,1}:
 'f'
 'u'
 'a'
 'd'
 'h'
 'e'
 's'
 'e'
 'n'

julia> join(res)
"fuadhesen"

这是您想要的吗?

编辑:这是一个合并示例:

julia> str1 = "fuad"
"fuad"

julia> str2 = "hesen"
"hesen"

julia> str1, str2 = "fuad", "hesen"
("fuad", "hesen")

julia> c1, c2 = collect(str1), collect(str2)
(['f', 'u', 'a', 'd'], ['h', 'e', 's', 'e', 'n'])

julia> res = Char[]
0-element Array{Char,1}

julia> for i in 1:max(length(c1), length(c2))
           i > length(c1) || push!(res, c1[i])
           i > length(c2) || push!(res, c2[i])
       end

julia> res
9-element Array{Char,1}:
 'f'
 'h'
 'u'
 'e'
 'a'
 's'
 'd'
 'e'
 'n'

julia> join(res)
"fhueasden"

答案 1 :(得分:3)

您的代码有很多问题。 @BogumilKaminski展示了一般如何连接字符串的方法,但是您询问“编写的内容是否正确”,所以我会指出一些问题。

str1 = "fuad"
str2 = "hesen"
result = ""
str = ""
merge = str1 * str2

如上所述,字符串是不可变的,这意味着一旦创建了一个字符串,就无法更改它,只能创建一个新的字符串。上面,您正在将result初始化为一个空字符串-这是行不通的,您无法更新它。您也正在初始化str,但这也没有意义,因为在下面您要重新分配它,因此无论如何初始化都是浪费的。还请注意,str1str2的长度不同,这是一个问题。

if str1>str2
str= str1
else str=str2
end

在这里,您正在将str1str2>进行比较。我不确定你要干什么。这是一个词法比较,因此您要按字母顺序对其进行排序。那是你想要的吗?还是您想比较它们的长度?在这种情况下,您应该写length(str1) > length(str2)。如果您确实想要按字母顺序比较,则可以改写str = max(str1, str2)

for i = 1:merge
        result[i]=str1[i]
        result[j+1]=str2[j]
        j=j+1
        i=i+1
end

根据四个或五个原因(取决于您的计算方式),此方法将无效。

  • 1:merge没有意义,因为merge是一个字符串。您不能从1到“ fuadhesen”进行计数。 (而且,您不能使用字符串或字符作为数组的索引。)我猜您的意思是for i = 1:length(merge),对吗?

  • 字符串是不可变的,因此无论如何您都无法对它们进行突变/更新。

  • 即使字符串可变的,您也只能预先分配空字符串,因此将不允许写入result[i] = str1[i],因为result为空并且没有空间接受任何字符。如果字符串是可变的,则必须使用push!
  • 变量j仅显示在循环中,没有任何初始值。那是哪里来的?

编辑:顺便说一句,这是您合并问题的部分解决方案。您可以使用zip函数,该函数像拉链一样将两个(或更多)迭代器“压缩”在一起。然后,使用append!函数将多个元素添加到集合的末尾(对于单个字符,您可以使用push!)。最后,使用join创建一个字符串:

cstr = Char[]  # initialize empty vector of Characters
for c in zip(str1, str2)  # iterate over zipped strings
    append!(cstr, c)  # append them onto your empty array
end
# push!(cstr, last(str2))  # str1 and str2 are different lengths, if you want last 'n' to join you can uncomment this line.
str = join(cstr)  # collect into string

请确保您阅读了字符串文档https://docs.julialang.org/en/v1/manual/strings/,还查阅了push!append!zipjoin的文档。只需复制代码,您将不会学到很多东西。

答案 2 :(得分:1)

其他答复在解释字符串和指向更多学习资源方面做得很好,因此我将略过一点,仅提出解决方案。

result = string(Iterators.flatten(zip(str1, str2))...)

但是请注意,这会截断最长的字符串以匹配最短的字符串。