具有“ find_first_of”功能的C ++字符串错误

时间:2018-08-30 10:03:15

标签: c++ string

我想得到两个引号之间的单词,所以即时通讯使用std :: string :: find_first_of 但是pos2和pos1的值相同,则会导致错误。

ext {
   roomVersion = '1.0.0'
   archLifecycleVersion = '1.1.0'
}

3 个答案:

答案 0 :(得分:4)

要在位置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('\"');将产生相同的结果,因为字符串包含两个引号,因此第二个引号也是最后一个引号。

答案 1 :(得分:1)

您误解了document.querySelectorAll的第二个参数。这是要搜索的最后个字符。因此,您最终只能再次找到相同的角色。删除第二个参数,您的代码即可使用

find_last_of

答案 2 :(得分:1)

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

  

pos-   搜索中要考虑的字符串中最后一个字符的位置。   任何大于或等于字符串长度的值(包括string :: 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;