Я новичок в C++ и пытаюсь написать программу, которая может сортировать набор имен (в алфавитном порядке), которые я вводил, но я хотел бы сделать это, чтобы сразу вводить все имена; Я уже закодировал сортировку и прошел проверку с несколькими именами, но сейчас мне нужно нажать enter после каждого имени, чтобы обозначить новый. Я искал способ разделения ввода на основе пробелов во входном файле, но все, что я нашел, это то, что отделяет только первые 2 слова/имена:
int main(){
string input;
getline(cin, input);
string temp1;
string temp2;
for (int i = 0; i < input.length(); i++){
if (input[i] == ' ') {
temp1.append(input.substr(0, i));
temp2.append(input.substr(i + 1, input.length() - 1));
break;
}
}
cout << temp1 << endl;
cout << temp2 << endl;
}
Я играл с части, которые, как представляется, отделяют код и пытались сделать их повторяющимися для каждого пространства, но я не могу заставить его работать. Как я уже сказал, я довольно новичок в C++, поэтому, если кто-то может направить меня в правильном направлении или предложить лучший способ выполнить то, что я пытаюсь сделать, было бы здорово.
Благодаря,
-Eric
---Редактировать---
Пример ввода:
Уильям Чарли Сара Питер Мэтт Джон
Пример:
Чарли Джон Мэтт Питер Сара Уильям
(Как я уже сказал, у меня уже есть программа для упорядочивания имен, мне просто нужно знать, как вводить все имена сразу, и назначить программу первой для temp1, второй для temp2, третий для temp3 и т.д.)
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
using namespace std;
vector<string> separate_string(const string& input)
{
istringstream input_stream(input);
string buffer;
vector<string> separated;
while (input_stream >> buffer)
{
separated.push_back(buffer);
}
return separated;
}
int main()
{
string test_string = "William Charlie Sarah Peter Matt John";
auto names = separate_string(test_string);
sort(begin(names),end(names));
for (const auto& s : names)
cout << s << endl;
}
Объяснение:
Объект input_stream
типа std::istringstream
принимает строку в виде. Затем вы можете использовать его как cin
. Используя оператор выделения >>
, строка уже разделяется символами пробела.
Цикл while останавливается, когда он достигает конца входной строки.
Разделенные строки хранятся в векторе для строки.
main
- это просто тестовая программа. Вы можете написать свой собственный, чтобы выполнить свою миссию.
getline(cin, input)
? Это то, что ты хочешь.