【发布时间】:2012-08-07 21:24:53
【问题描述】:
str.find('X') 的反义词—— 在 std::string 中查找与特定字符不同的第一个字符的最有效方法是什么?如果我有一个主要由 X'es 组成的字符串,但在某些时候还有另一个字符 - 我如何快速找到它?
【问题讨论】:
str.find('X') 的反义词—— 在 std::string 中查找与特定字符不同的第一个字符的最有效方法是什么?如果我有一个主要由 X'es 组成的字符串,但在某些时候还有另一个字符 - 我如何快速找到它?
【问题讨论】:
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'; });
【讨论】:
我认为最有效的方法是遍历字符串并将每个字符与'X' 进行比较,返回第一个不同的字符。
在没有任何关于字符串的先验知识的情况下,我没有看到比 O(n) 更好的方法,并且连续调用 find('X') 可能比仅遍历字符更糟糕。
【讨论】: