C++函数的字符串错误"find_first_of"
C++ string error with "find_first_of" function
我想获取两个引号之间的单词,所以我使用 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;
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 在 QVector<std::unique_ptr 上使用 std::find<Type>>
- 错误"Could not find Boost"(缺少:上下文标头)
- C++算法标头中,为什么要使用 "!(val < *first)" ?
- /usr/bin/ld: cannot find -lc++
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 使用 find 解析文件会给出不同文件的奇怪结果
- 在 ifcondition al中 find() C++ STL 中的 == a.end() 有什么用?
- Cannot find -lglad
- "Cannot find -l<directory>"错误 - CMake
- 为什么在向量上使用 std::find() 时会出现错误?
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- C++ find() 在存储为变量时返回不同的值
- set::find 查找不存在的元素
- 使用 std::find 时没有匹配的函数调用错误
- 迭代嵌套映射与范围为循环:没有名为"first"的成员
- C++ 字符串迭代器"find first of"
- 应对"Find the first repeated character in a string"挑战的最紧凑、高效、可读和智能的解决方案