0

編集:だから、私が以前に持っていたものが正しかったことがわかりました.私は単にインデックスを間違って数えていました. ご意見ありがとうございます。

ユーザーからの特定の文字列内のすべての部分文字列インデックスを見つけるメソッドに取り組んでいます。userString.IndexOf から正しい位置を取得する際に問題が発生しています。部分文字列のすべての出現を見つけていることは知っていますが、整数インデックスはかなりずれています。

private static void getSubStringPositions(string userString, string userSubString)
{
    string subStringPositions = "";
    int position = 0;

    if (userString.IndexOf(userSubString, position) == -1)
    {
        Console.WriteLine("Your sub-string was not found in your string.\n");
        return;
    }
    while (position < userString.Length)
    {
        position += userString.IndexOf(userSubString, position);
        subStringPositions += Convert.ToString(position) + ", ";
    }

    Console.WriteLine("The occurernce(s) for your sub-string are: " + subStringPositions + "\n\n");
    return;
}

問題かもしれないと思いますposition += userString.IndexOf(userSubString, position);が、部分文字列の位置の正確な記録を維持しながら、新しい開始位置を設定する方法が完全にはわかりません。

4

3 に答える 3

4

LINQ を使用してこれらのインデックスを見つける簡潔な方法:

public static IEnumerable<int> FindIndexes(string text, string query)
{
    return Enumerable.Range(0, text.Length - query.Length)
        .Where(i => query.Equals(text.Substring(i, query.Length));
}

FindIndexes("abcbcbc", "bcb")インデックス1とが見つかります3

于 2013-10-25T18:36:07.233 に答える
1

ここで別の問題があります。あなたが電話するとしましょう:

getSubStringPositions("abcabcabcabc", "abcabc");

次のように、実際には部分文字列が 3 回発生するのに、関数は文字列が 2 回発生すると誤って報告します。

  • abcabc.abcabc
  • abc.abcabc.abc <- 関数はこれを飛び越えます
  • abcabc.abcabc.
于 2013-10-25T18:32:43.223 に答える