2014-09-10 104 views
0

我对C++相当陌生,并且正在尝试编写一个程序,该程序可以对我输入的一组名称(按字母顺序排序)进行排序,但是我希望这样做我可以一次输入所有的名字;我已经对排序进行了编码,并且已经用多个名字进行了测试,但现在我必须在每个名字后面输入一个字来表示一个新名字。我搜索的方式来根据关中输入空格输入分开但我发现这里面只有分开第一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++中拆分字符串?](http://stackoverflow.com/questions/236129/how-to-split-a-string-in-c) – mostruash 2014-09-10 22:16:56

+0

答案:http:// stackoverflow.com/questions/236129/how-to-split-a-string-in-c – Protopopulus 2014-09-10 22:18:46

+0

有什么办法来调整我已经有的代码吗? – Eric 2014-09-10 22:24:35

回答

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; 
} 

说明:

对象std::istringstream类型的input_stream呈现敷设渠道的字符串。然后,你可以使用它像cin。使用提取运算符>>,字符串已被空格字符分隔。

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

分隔的字符串存储在一个字符串的向量中。

main只是一个测试程序。你可以自己写完成你的任务。

+0

谢谢,这个作品很棒!我只有最后一个问题,我觉得它很愚蠢,因为我确定它很明显,但不是直接将test_string定义为“William Charlie等”。我试图添加“string test_string;”和“cin >> test_string;”直接在下面,然后它只输出我在cmd输入的名字。我应该在哪里添加“cin”,因为显然我做错了什么。 – Eric 2014-09-11 20:14:39

+0

@ user3052738看看你自己的问题。你能找到'getline(cin,input)'吗?那就是你想要的。 – 2014-09-12 01:28:15

+0

但我在哪里添加?我尝试添加它在我的原始代码中的位置,但它说任何重载都不能转换所有的参数类型。 – Eric 2014-09-12 01:50:07

相关问题