我想将用户输入的一些字符串合并为1个字符串,但是如果第一个字符串的结束模式与第二个字符串的开始模式相同,则删除第二个字符串的开始模式并将其合并为1个字符串。
例如:
“ apple” +“ letter” +“ man” 3个字符串,输出为“ appletterman”
“ helloworld” +“ world” +“!” 3个字符串,输出为“ helloworld!”。
我只是编写了输入部分,我不知道如何继续进行合并过程。
noquote(matrix_maker())
Number of rows and columns: 4
[,1] [,2] [,3] [,4]
[1,] * * * *
[2,] * *
[3,] * *
[4,] * * * *
对不起,我的解释不好。
答案 0 :(得分:4)
以下内容应满足您的需求:
string MergeWords(string word1, string word2)
{
for (int i = word2.Length; i > 0; i--)
{
if (word1.EndsWith(word2.Substring(0, i)))
{
return word1 + word2.Substring(i);
}
}
return word1 + word2;
}
基本上
它将迭代第二个单词,首先获取整个单词,然后每次迭代减少一个字母,并检查第一个单词是否以此模式结尾。
上面的循环可以用LINQ重写:(由我自己决定,哪个更易读和清楚)
string MergeWords(string word1, string word2)
{
var index = Enumerable
.Range(0, word2.Length+1)
.First(i => word1.EndsWith(word2.Substring(0, word2.Length - i)));
return word1 + word2.Substring(word2.Length - index);
}
答案 1 :(得分:0)
此方法尝试在第二个字符串的开头查找最长的匹配项:
static string join(string a,string b)
{
for (var i=0;i<a.Length;i++)
{
if (b.IndexOf(string.Join("", a.ToArray().Skip(i))) == 0)
{
return a + string.Join("", b.ToArray().Skip(a.Length - i));
}
}
return a + b;
}
然后您可以像这样使用它:
string[] testArray = { "apple", "letter", "man" };
var result = "";
for (int i = 0; i < testArray.Count(); i++)
{
result = join(result, testArray[i]);
}
输出:
"appletterman"