返回在字符串中重复的多个字符串,而不使用任何函数

时间:2016-12-20 05:10:01

标签: c#

我有一个像a;sfjdksldrkdjlfdrarakdfkjra这样的字符串。 我想计算多少次" ra"重复上面的字符串。 我尝试使用不同的方法,但我失败了。

string str = "rajdlkfja;ra;jdfsraralj;fra";
int count = 0;
char[] ch = str.ToCharArray();
for(int i = 0; i <= ch.Length; i++)
{
    if(ch[i] == 'r' && ch[i + 1] == 'a')
    {
        count++;
    }
}

Console.WriteLine(count);

1 个答案:

答案 0 :(得分:3)

问题在于你有IndexOutOfRangeException:请记住C#中的数组是基于零的,这意味着具有n元素的数组具有从0到{{1}的指示(当我们人类计算时,我们自然会从一个开始,所以5个梨是1个,2个,3个,4个和5个梨,但在c#数组中,我们将它们视为0,1,2,3和4)。

因此,一般来说,当你想循环一个数组时,拇指的规则是:n - 1

现在,这会解决您的问题吗?不,你还有一个for (int i = 0; i < array.Length; i++) //< instead of <=。为什么?问题是当IndexOutOfRangeException达到最后一个有效值i时,您正在Length - 1搜索a ch[ch.Length - 1 + 1]ch[ch.Length]我们现在知道这是错误的。< / p>

但等一下!为什么我们从字符串的最后一个字符开始搜索两个字符的模式?您不可能在该位置找到匹配项,因为没有字符串可以匹配模式中的第二个字符!我们不应该在那里看!好的,只循环到字符串的前一个字符:for (int i = 0; i < ch.Length - 1; i++)

现在你做完了,事情应该运转得很好。