Допустим у меня есть 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;
}
Тогда можно реализовать самопальную 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
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;
Сборка персонального компьютера от Artline: умный выбор для современных пользователей