我是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,等)
答案 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
只是一个测试程序。你可以自己编写以完成任务。