Как разделить один вход на несколько пробелами

0

Я новичок в 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 и т.д.)

  • 1
    Возможный дубликат Как разбить строку в C ++?
  • 0
    Ответ: stackoverflow.com/questions/236129/how-to-split-a-string-in-c
Показать ещё 7 комментариев
Теги:

1 ответ

0
Лучший ответ
#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 - это просто тестовая программа. Вы можете написать свой собственный, чтобы выполнить свою миссию.

  • 0
    Спасибо, это прекрасно работает! У меня есть только один последний вопрос, который я чувствую по-настоящему глупо, потому что я уверен, что это действительно очевидно, но вместо прямого определения test_string как «Уильям Чарли и т. Д.» Я пытался добавить "string test_string;" и "cin >> test_string;" вместо этого прямо внизу, а затем выводится только имя, которое я ввел в cmd. Где я должен добавить "Cin", потому что, очевидно, я делаю что-то не так.
  • 0
    @ user3052738 Посмотри на свой вопрос. Вы можете найти getline(cin, input) ? Это то, что ты хочешь.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню