2016-11-17 3 views
-2

У меня есть этот код, и я хочу вставить новую строку после каждой точки с помощью инструкции insert. Я получаю сообщение об ошибке без соответствующей функции-члена для вызова «insert». Что я делаю не так?Вставить новую строку после каждой точки, C++

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

Что такое 'inText10'? Он не определен в вашем коде – UnholySheep

ответ

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

Есть много неопределенных переменных в коде, но в основном вы не получите «не соответствующий функции-члена для вызова„Insert“», потому что вы пытаетесь вставить зЬй :: Endl в строку , std :: endl не может быть отправлен на char любого типа, поэтому вы не можете этого сделать.

Чтобы устранить проблему, замените

inText10.insert(dotpos, endl); 

с

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

Кстати, если вы хотите вставить \ п после каждой точки, вы должны сделать найти() в цикле , так как find() возвращает единственную согласованную позицию char, а не массив.

Чтобы узнать больше, почему вы не можете вставить зЬй :: Endl, прочитать std::endl description at cppreference