【问题标题】:Search string for first char different than "X"搜索与“X”不同的第一个字符的字符串
【发布时间】:2012-08-07 21:24:53
【问题描述】:

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

【问题讨论】:

    标签: c++ stdstring


    【解决方案1】:
    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'; });
    

    【讨论】:

    • @dribeas 还有一个需要单个字符的重载。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2013-01-18
      • 2016-06-22
      • 2021-11-28
      相关资源
      最近更新 更多