c++中的字符串库出错:libc++abi.dylib:终止,类型为std::out_of_range:basic_st
Error with string library in c++ :: libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: basic_string (lldb)
我被要求输入一个短语和一个单词,并将所有单词替换为"*"。
示例:我喜欢狗,但我姐姐不喜欢狗
单词:狗
我爱,但我姐姐不喜欢
当我在循环中放入短语的cout时,它会按原样显示它,但我得到了一个"libc++abi.dylib:终止于std::out_of_range:basic_string类型的未捕获异常(lldb)"错误
发布图片至少需要10个信誉:https://i.stack.imgur.com/00FJl.png
#include <iostream>
#include <string>
using namespace std;
int main()
{
string frase;
string palabra;
getline(cin,frase);
getline(cin,palabra);
int longitud = palabra.length();
int encontrar = frase.find(palabra);
while(encontrar != 1){
if(encontrar != 1){
encontrar = frase.find(palabra);
frase.erase(encontrar,longitud);
frase.insert(encontrar, " * ");
}
cout<<frase<<endl;
}
}
您使用string::find
的方式不正确。
string::find
返回:
-第一个匹配的第一个字符的位置
-如果未找到匹配项,则为string::npos
。
因此,您的支票应该与string::npos
进行比较。你可以这样修改你的while
循环:
while(encontrar != string::npos){
frase.erase(encontrar, longitud);
frase.insert(encontrar, " * ");
encontrar = frase.find(palabra);
}
请参阅此处的演示。
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- 在 std::unordered_map 中插入新的键/值对会导致"out of range"异常
- swig perl typemap(out) std::vector<std::string> 在 perl 中不返回所需的输出
- "friend std::ostream& operator<<(std::ostream& out, LinkedList& list)"是什么意思?
- 尝试同时写入 std:out 和文件
- 错误:非静态引用成员"std::ostream&Student::out",无法使用默认赋值运算符
- c ++如何使我.get() std::future out of a vector.
- 如何在 Linux 中将孩子的进程 std (out / err) 设置为父级
- fstream::open() Unicode 或非 ASCII 字符在 Windows 上不起作用(使用 std::ios::out)
- C++同时写入 std::out 和 std:clog
- Printing out std::map
- 将Std::vector通过ref / out从c#传递到c++
- QTextStream and std out
- 聚合'std::stringstream out'具有不完整的类型,无法定义 [C++]
- 以std:: Fstream::in | std:: Fstream::out | std:: Fstream::app