2012-08-07 70 views
0

str.find('X') - 的反义词找到std :: string中与特定char不同的第一个字符的最有效方法是什么?如果我有一个主要由X'es组成的字符串,但在某些时候还有另一个字符 - 我如何快速找到它?不同于“X”的第一个字符的搜索字符串

回答

5
std::string str = "XXXXXXXXXXXXXXX.XXXXXXXXXXX"; 

size_t index = str.find_first_not_of('X'); 

但是,一个普通的旧for循环将一样好。

或者,如果你想要一个迭代器,而不是一个指标,或许是这样的:

std::string::iterator = std::find_if(str.begin(), str.end(), 
         [](char c){ return c != 'X'; }); 
+1

@dribeas有接受单个字符,也超载。 – jrok 2012-08-07 21:31:50

0

我认为最有效的方法是迭代字符串,并将每个字符与'X'进行比较,返回第一个不同的字符。

没有任何关于字符串的预先知识,我没有看到比O(n)更好的方法,并且连续调用find('X')可能比只遍历字符更糟糕。