检查字符串是否出现特定字符

时间:2016-10-14 01:36:49

标签: c++ string search boost find

如何在字符串内部搜索特定字符的多次出现(在这种情况下为句点.)?

我已经尝试调整this question的答案,但我认为我做错了。

std::string periodCheck = i.convert_to<std::string>();
char subString = '.';
std::size_t pos = periodCheck.find(subString, 0);
int counter;
while(pos != std::string::npos){
    counter++;
    if(counter > 1){
        std::cout << "\nError: Multiple periods\n";
        return false;
    }
}

第一行只是从Boost多精度cpp_dec_float(名为i)转换为字符串。我知道这部分代码可以工作,因为我在程序的其他地方有效地使用它。

我正在尝试检查字符串是否包含多个句点。如果字符串中包含多个句点,则函数返回false

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

如果你找到一个句号,那么你的下一个逻辑步骤也是再次搜索,从下一个字符位置开始。

但是,如果您查看代码,则无法找到实际再次搜索的位置。在while循环中没有调用find()

根本不需要while循环。您需要做的就是再次拨打find(),指定pos+1作为第二次搜索的起始位置,然后再次检查结果。如果你找到另一个时期,你可以称之为包裹。搜索字符串中的任何剩余句点不会获得任何结果。你有答案。

std::size_t pos = periodCheck.find(subString, 0);

if (pos != std::string::npos)
{
     pos=periodCheck.find(subString, pos+1);
     if (pos != std::string::npos)
          return false;
}