如何将2个字符串合并为1个字符串,并删除重复的字符串模式? C#

时间:2019-02-10 11:15:08

标签: c#

我想将用户输入的一些字符串合并为1个字符串,但是如果第一个字符串的结束模式与第二个字符串的开始模式相同,则删除第二个字符串的开始模式并将其合并为1个字符串。

例如:

  1. “ apple” +“ letter” +“ man” 3个字符串,输出为“ appletterman”

  2. “ helloworld” +“ world” +“!” 3个字符串,输出为“ helloworld!”。

我只是编写了输入部分,我不知道如何继续进行合并过程。

noquote(matrix_maker())
Number of rows and columns: 4
     [,1] [,2] [,3] [,4]
[1,] *    *    *    *   
[2,] *              *   
[3,] *              *   
[4,] *    *    *    *   

对不起,我的解释不好。

2 个答案:

答案 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"