检查string是否包含其他字符串元素

时间:2013-06-07 23:43:39

标签: c++ objective-c

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

例如:

大字符串:thisisstring

小字符串:hssg

它应该返回true。

我只想出了如何检查字符串是否包含整个其他字符串而不是部分。 这是我为现在检查编写的代码:

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

2 个答案:

答案 0 :(得分:5)

  1. 如果没有其他字符要从小字符串中搜索,请返回true。
  2. 从大字符串中最近找到的字符后面的位置开始,对尚未搜索的小字符串中的第一个字符进行线性搜索。
  3. 如果找不到该字符,请返回false。
  4. 从1开始。

答案 1 :(得分: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;