如何通过空格将一个输入分隔为多个输入

How to separate one input into multiple by the spaces

本文关键字:输入 何通过 分隔 一个 空格      更新时间:2023-10-16

我对C++还很陌生,正在尝试编写一个程序,可以对我输入的一组名称(按字母顺序)进行排序,但我想这样做,这样我就可以一次输入所有名称;我已经对排序进行了编码,并对多个名称进行了测试,但现在我必须在每个名称后面按enter键来表示新名称。我搜索了一种根据输入中的空格来分隔输入的方法,但我只找到了只分隔前两个单词/名称的方法:

    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

---编辑---

示例输入:

William Charlie Sarah Peter Matt John

输出示例:

Charlie John Matt Peter Sarah William

(正如我所说,我已经有了进行名称排序的程序,我只需要知道如何一次输入所有名称,并让程序将第一个名称分配给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;
}

说明:

类型为std::istringstream的对象input_stream在构造时采用字符串。然后,您可以像cin一样使用它。使用提取运算符>>,字符串已经由空格字符分隔。

while循环在到达输入字符串的末尾时停止。

分离的字符串存储在字符串的矢量中。

main只是一个测试程序。你可以写自己的来完成你的使命。