1

文字列に特定の順序で異なる文字列の要素が含まれているかどうかを確認しようとしています。

例えば:

大きな文字列: thisisstring

小さな文字列: hssg

true を返す必要があります。

文字列に他の文字列全体が含まれているが部分は含まれていないかどうかを確認する方法を見つけただけです。これは、今のところチェック用に書いたコードです。

if ([largestring rangeOfString:smallstring].location != NSNotFound) {
   printf("contains");
}
4

2 に答える 2

5
  1. 小さな文字列から検索する文字がこれ以上ない場合は、true を返します。
  2. 大きな文字列で最後に見つかった文字の後の位置から開始して、まだ検索されていない小さな文字列の最初の文字を線形検索します。
  3. 文字が見つからなかった場合は、false を返します。
  4. 1 に戻ります。
于 2013-06-07T23:54:14.743 に答える
2

これを行う簡単な方法はありません。少なくとも、私が知っている組み込みの方法はありません。小さな文字列の各文字を繰り返し処理し、大きな文字列に一致する最初の文字を見つける必要があります。

一致する文字が見つかるたびに、次の小さな文字列にループしますが、代わりに、前の文字が見つかった後でのみインデックスで検索を開始します。

編集: テストされていないいくつかの疑似コードには、構文エラーがある可能性があります:

int foundChar = 0;
for (int l = 0; l < strlen(smallstring); l++)
{
  bool found = false;
  for (; foundChar < strlen(largestring); foundChar++)
  {
    if (smallstring[l] == largestring[foundChar])
    {
      // We break here because we found a matching letter.
      // Notice that foundChar is still in scope so we preserve
      // its value for the next check.
      found = true;
      foundChar++;  // Increment so the next search starts with the next letter.
      break;
    }
  }
  // If we get down here, that means we've searched all of the letters
  // and found no match, we can result with a failure to find the match.
  if (found == false)
  {
    return false;
  }
}

// If we get here, it means every loop resulted in a valid match.
return true;
于 2013-06-07T23:52:46.997 に答える