【问题标题】:Error with string library in c++ :: libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: basic_string (lldb)c++ 中的字符串库出错 :: libc++abi.dylib: 以 std::out_of_range 类型的未捕获异常终止:basic_string (lldb)
【发布时间】:2019-01-23 05:49:31
【问题描述】:

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

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

词:狗

最后一句话:我喜欢*但我姐姐不喜欢*

当我将短语的 cout 放入循环中时,它会按原样显示它,但我得到一个 "libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: basic_string (lldb)" 错误

您需要至少 10 个声望才能发布图片:https://imgur.com/5Zf9ys5.jpg

#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;
}

}

【问题讨论】:

    标签: c++ string xcode


    【解决方案1】:

    您以错误的方式使用string::find

    string::find 返回:
    - 第一个匹配的第一个字符的位置。
    - string::npos 如果没有找到匹配项。

    所以您的支票应该与string::npos 进行比较。您可以像这样修改while 循环:

    while(encontrar != string::npos){
            frase.erase(encontrar, longitud);
            frase.insert(encontrar, " * ");
            encontrar = frase.find(palabra);
    }
    

    demo here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      相关资源
      最近更新 更多