我正在尝试找到一个从用户获取输入的算法(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来解决这个问题,那就没问题了。
答案 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);