在每个点之后插入新行,c++

Insert a new line after each dot, C++

本文关键字:新行 c++ 插入 之后      更新时间:2023-10-16

我有这个代码,我想用插入语句在每个点之后插入一个新行。我得到错误消息,没有匹配的成员函数调用'insert'。我做错了什么?

#include<iostream>
#include<string>

using namespace std;
int main ()
{ 
    string const inText1 = "I'm reading. ";
    string const inText2 = "I like to read. ";
    string const inText3 = "I'm gonna read that book. ";
    string const inText4 = "She's reading. ";
    string const inText5 = "He's reading. ";
    string const inText6 = "READ. ";
    string const inText7 = "Reading. ";
    string inText8=inText1+inText2+inText3+inText4+inText5+inText6+inText7;
    string::size_type dotpos = inText10.find(".");
    if(dotpos != string::npos)
        inText10.insert(dotpos, endl);

    cout << inText10 << endl;

    return 0;
}

假设inText10只是inText8,这是工作代码。

更改完成:

  1. 先前,没有找到inText10字符串。因此,对该对象的insert()可能会产生错误。
  2. 插入换行的位置是NOT dotpos。其dotpos + 1
  3. 注意,这段代码只是在找到第一个点后添加了一个换行符。要在每个点后面添加换行符,请使用while循环查找所有点并在其旁边插入换行符。

    #include<iostream>
    #include<string>
    using namespace std;
    int main ()
    { 
       string const inText1 = "I'm reading. ";
       string const inText2 = "I like to read. ";
       string const inText3 = "I'm gonna read that book. ";
       string const inText4 = "She's reading. ";
       string const inText5 = "He's reading. ";
       string const inText6 = "READ. ";
       string const inText7 = "Reading. ";
      string inText8=inText1+inText2+inText3+inText4+inText5+inText6+inText7;
      string::size_type dotpos = inText8.find(".");
      if(dotpos != string::npos)
        inText8.insert(dotpos + 1, "n");
    
      cout << inText8 << endl;
      return 0;
    }
    

在你的代码中有很多未定义的变量,但基本上你收到'没有匹配的成员函数调用'insert ",因为你试图插入std::endl到一个字符串。Std::endl不能被强制转换为任何类型的char,所以,你不能这样做。

要解决您的问题,请替换

inText10.insert(dotpos, endl); 

inText10.insert(dotpos, 'n');

顺便说一下,如果你想在每个点后面插入n,你应该在循环中做find(),因为find()返回一个匹配的字符位置,而不是一个数组。

要了解更多,为什么不能插入std::endl,请阅读cppreference

中的std::endl描述。