Запись текста в std::string дважды. С++

125
30 августа 2019, 03:50

Допустим у меня есть std::string str. Хочу ввести с клавиатуры текст, который скопируется в str. Можно через std::getline(std::cin, str). А как снова что нибудь ввести с клавиатуры и это что-то также скопируется в str не создавая при этом других std::string str1 (То есть не создавая временную переменную std::string str1 в которой будет текст, который я ввел во второй раз, а потом str += str1). Например я ввел Первая в командной строке нажал Enter , потом ввел строка и std::cout << str выведет мне Первая строка.

#include <iostream>
#include <string>
int main()
{
    std::string str;
    std::getline(std::cin, str); // Ввожу  `первая`
    std::cout << "\n" << str << "\n"; // выведет `первая`
    std::getline(std::cin, str);// Ввожу `строка`
    std::cout << "\n" << str << '\n';// Вывдет `строка`
    return 0;
}
Answer 1

Тогда можно реализовать самопальную getline, неперезаписывающую строки:

#include <iostream>
#include <string>
::std::istream &
my_getline(::std::istream & input, ::std::string & str)
{
    for(;;)
    {
        auto const c{::std::cin.get()};
        if(::std::cin.good() && ('\n' != c))
        {
            str.push_back(static_cast<char>(c));
        }
        else
        {
            break;
        }   
    }
    return input;
}
int main()
{
    ::std::string str;
    my_getline(::std::cin, str);
    ::std::cout << str << "\n"; // выведет `первая`
    my_getline(::std::cin, str);
    ::std::cout << str << '\n';// Вывдет `перваястрока`
    return 0;
}

online compiler

Answer 2
using std::string;
using It = std::istream_iterator<string>;
It first(std::cin), last();
string s;
while (std::cin) {
    s += *first++;
    s += ' ';
}
std::cout << s;
READ ALSO
QT Vector QAction

QT Vector QAction

Стоит перед мной задача:

136
Как превратить map&lt;String,String&gt; в объект класса?

Как превратить map<String,String> в объект класса?

Есть map описывающий сущность, где пара это имя поля и его значениеПодскажите пожалуйста, есть ли какой нибудь инструмент который позволит...

143
break выход из цикла или всё-таки

break выход из цикла или всё-таки

break - выбрасывает вас из цикла либо же ключевое слово которое выходит из циклаЗавершить цикл раньше времени и тд

163
Загрузка данных из Firebase database в RecyclerView фрагмента

Загрузка данных из Firebase database в RecyclerView фрагмента

В фрагменте есть RecyclerView, в который должны загружаться картинкиОданко при тесте приложение вылетает при переходе на фрагмент с этим RecyclerView

217