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)

本文关键字:out std of st basic range 类型 终止 字符串 出错 c++      更新时间:2023-10-16

我被要求输入一个短语和一个单词,并将所有单词替换为"*"。

示例:我喜欢狗,但我姐姐不喜欢狗

单词:狗

我爱,但我姐姐不喜欢

当我在循环中放入短语的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);
}

请参阅此处的演示。