在每个点后插入一个新行,C ++

时间:2016-11-17 10:41:08

标签: c++

我有这个代码,我想在每个点后面插入一个新行,带有一个insert语句。我收到错误消息没有匹配的成员函数来调用'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;
}

2 个答案:

答案 0 :(得分: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;
    }
    

答案 1 :(得分:0)

您的代码中有很多未定义的变量,但基本上您没有获得匹配的成员函数来调用&#39;插入&#39;&#39;因为您试图将std :: endl插入到字符串中。 std :: endl不能被转换为任何类型的char,因此,你不能这样做。

要解决您的问题,请替换

inText10.insert(dotpos, endl); 

inText10.insert(dotpos, '\n');

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

要了解更多信息,为什么您无法插入std :: endl,请阅读此std::endl description at cppreference