string1中存在多少个string2?

时间:2014-10-15 14:59:20

标签: c# algorithm programming-languages

我正在尝试找到一个从用户获取输入的算法(string1)然后接受另一个(string2)然后计算string1中存在多少个string2。 例如:

这里有1个字符串1#

string1="##"
string2="#"
answer:2

string1中有2个## :(第一个索引为0,1第二个索引为1,2)

string1="###"
string2="##"
answer=2

string1中有3个## :(第1个:0,1第2个索引:1,2个第3个索引:2,3个索引)

string1="####"
string2="##"
answer=3

计算#在这里我们可以这样做:

string1.Length - string2.Length + 1

但是我只能使算法适用于这样的例子,而输入可以是任何东西。现在我需要一个算法来为我做这个。 这是,y代码适用于我的输入,但不适用于所有输入。 例如,如果string2是#a。

string string1 = "#abc##asd###12####";
string string2 = "##";
char[] str2 = string2.ToCharArray();
string[] str1 = string1.Split(str2);
string chars = "";
foreach (string s in str1)
    foreach (char c in s)
        chars += c;
//Result for chars are:a, b, c, a, s, d, 1, 2 
string[] splits = string1.Split(chars.ToCharArray());
//Result for splits are:#, ##, ###, ####
int sum = 0;
for (int i = 0; i < splits.Length; i++)
{
    if (splits[i].Length<string2.Length)
        continue;
    else
        sum += splits[i].Length - string2.Length + 1;
}
Console.WriteLine(sum);

在我的算法中,我用string2字符分隔了string1,然后计算了由split方法创建的字符串[]。

我已经知道我的算法完全错了,但无论如何我无法解决。我只是把代码展示给我试过的东西 如果你在答案中写算法,那就太好了。我也对lambda和linq有一点了解,所以如果你可以通过lambda或linq或func或expression来解决这个问题,那就没问题了。

1 个答案:

答案 0 :(得分:2)

这是一个有效的代码:

string string1 = "#abc##asd###12####";
string string2 = "##";
List<int> indexes = new List<int>();
int index = -1;
while((index = string1.IndexOf(string2, index + 1)) >= 0)
{
    indexes.Add(index);
}

Console.WriteLine(indexes.Count);