我想得到两个引号之间的单词,所以即时通讯使用std :: string :: find_first_of 但是pos2和pos1的值相同,则会导致错误。
ext {
roomVersion = '1.0.0'
archLifecycleVersion = '1.1.0'
}
答案 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;