2016-12-20 7 views
0

私はa;sfjdksldrkdjlfdrarakdfkjraのような文字列を持っています。 "ra"が上記の文字列で何度繰り返されたかを数えたいと思います。 私は別の方法を使ってみましたが失敗しました。 nの要素を持つ配列が0からn - 1(私たち人間は数えるとき、私たちは自然に開始するindiceesを持っていることを意味しているC#での配列はゼロ基づいて心の中でクマ:関数を使用せずに文字列で繰り返す文字列を返す

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); 
+0

「私は別の方法を使用しています」からの不具合を含めることは可能です –

+0

[文字列内の文字の出現をカウントする]の可能な複製(http://stackoverflow.com/questions/1155617/count-occurrence -a-a-string) – Lucifer

+0

'Regex.Matches(input、pattern).Count'パターンは' 'ra" ' –

答えて

3

問題は、あなたがIndexOutOfRangeExceptionを持っているということです5匹の梨が1匹、2匹、3匹、4匹、5匹であるが、C#アレイでは0、1、2、3および4で梨としてカウントする)。

一般に、配列をループしたいときは、親指のルールはfor (int i = 0; i < array.Length; i++) //< instead of <=です。

これで問題は解決しますか?いいえ、あなたはまだIndexOutOfRangeExceptionです。どうして?問題は、iが最後の有効な値であるLength - 1に達したときにach[ch.Length - 1 + 1]で検索したところ、ch[ch.Length]が間違っていることがわかります。

しかし、1分待ってください!文字列の最後の文字から始まる2文字のパターンを検索するのはなぜですか?パターンの2番目の文字と一致する文字列が残っていないので、その位置で一致するものを見つけることはできません!私たちはそこを見てはいけません! [OK]をクリックすると、文字列の最後の文字の前にループします:for (int i = 0; i < ch.Length - 1; i++)

これであなたのやり遂げられたことはうまくいくはずです。

関連する問題