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

时间:2014-09-10 22:12:16

标签: c++

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

    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

示例输出:

查理约翰马特彼得莎拉威廉

(正如我所说,我已经有了进行名称排序的程序,我只需要知道如何一次输入所有名称并让程序将第一个分配给temp1,第二个分配给temp2,第三个分配给temp3,等)

1 个答案:

答案 0 :(得分: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只是一个测试程序。你可以自己编写以完成任务。