1

我正在尝试检查字符串是否包含来自不同字符串的特定顺序的元素。

例如:

大字符串:thisiststring

小字符串: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 回答