C++函数的字符串错误"find_first_of"

C++ string error with "find_first_of" function

本文关键字:find first of 错误 函数 字符串 C++      更新时间:2023-10-16

我想获取两个引号之间的单词,所以我使用 std::string::find_first_of 但是 POS2 和 POS1 是相同的值,它会导致错误。

std::string ss="<tag2 name = "Name1">";
std::size_t pos1=ss.find_first_of(""");
std::size_t pos2=ss.find_first_of(""",pos1);//i'am using pos1 as a base position to get pos2.
std::cout<<pos1<<std::endl<<pos2;

要在位置 pos1 之后查找下一个出现的",您可以使用ss.find_first_of('"',pos1+1);

ss.find_last_of('"',pos1);将查找从您找到的第一个引号开始的引号,但向后/向字符串的开头看。可以使用ss.find_last_of('"');查找整个字符串中最后一次出现的引号。

在您的示例中,ss.find_first_of('"',pos1+1);ss.find_last_of('"');将产生相同的结果,因为字符串包含两个引号,因此第二个引号也是最后一个引号。

你误解了第二个参数来find_last_of.它是要搜索的最后一个字符。所以你最终会再次找到相同的角色。删除第二个参数,您的代码将起作用

std::string ss="<tag2 name = "Name1">";
std::size_t pos1=ss.find_first_of(""");
std::size_t pos2=ss.find_last_of(""");
std::cout<<pos1<<std::endl<<pos2<<std::endl;

根据参考资料 ,第二个参数不是开始搜索的位置,而是结束的位置。

位置 - 要在搜索中考虑的字符串中最后一个字符的位置。 任何大于或等于字符串长度的值(包括字符串::npos(都意味着搜索整个字符串。 注意:第一个字符由值 0(而不是 1(表示。

在您的情况下,您只需删除第二个参数,您将获得正确的位置pos2或 如果你想在Qoutes之间获取文本,你可以使用这个代码

std::string ss="<tag2 name = "Name1">";
std::size_t pos1=ss.find_first_of(""");
std::size_t pos2=ss.substr(pos1+1).find_first_of(""");
std::cout<<ss.substr(pos1+1,pos2)<<std::endl;