gpt4 book ai didi

c++ - 未知长度的用户以空格分隔的动态输入

转载 作者:行者123 更新时间:2023-11-28 05:42:41 25 4
gpt4 key购买 nike

如何从用户获取以空格分隔的 C++ 输入并将其存储到数组中?

最重要的部分是长度是未知的,在运行时应该由用户输入

#include<iostream>
using namespace std;
int main() {
int n=0;
string names[3];
int i = 0;
while ( getline( cin, names[i]))
{
cout<<"i = "<<i<<"\n";
cout<<names[i]<<"\n";
i++;
cout<<"i = "<<i<<"\n";
}
for(i=0;i<3;i++)
{
cout<<names[i];
}
return 0;
}

最佳答案

我在您的代码中发现的第一个问题是,您提供了一个固定大小string names[3]; 数组。存储来自用户的未知数量输入。那肯定行不通。

要解决此问题,请使用一个可以使用“任意”std::strings 的容器;

std::vector<std::string> names;

有了这个你就可以使用类似的东西了

std::vector<std::string> names;
std::string name;
while(cin >> name) {
names.push_back(name);
}

仍然存在的问题是如何结束这个循环。

有几个选项:

  1. 让用户使用 CTRL-D or CTRL-Z 之一(<- 微妙的链接)

  2. 要求他们输入一个特殊值,例如 quit , exit , -1结束输入

  3. 将其向下追踪到第二级以处理ENTER。使用 std::getline()使用 std::istringstream 解析所有单词或 break , 当 getline()读取空结果。

让我们分析一下:

  1. 是一个糟糕的选择,因为它依赖于操作系统并要求用户执行相对复杂的操作

  2. 限制可能的输入,并且需要一种方法来转义 quit 的输入, exit或类似的东西。

  3. 空输入(例如通过简单地额外点击 ENTER 键检索)可能是您可以向用户提供的最直观的输入。


作为我在 3. 中提出的解决方案:

std::string line;
std::vector<std::string> names;
while ( getline( cin, line)) {
if(line.empty()) {
// end input condition
break;
}
std::istringstream iss(line);
std::string name;
while(iss >> name) {
names.push_back(name);
}
}

关于c++ - 未知长度的用户以空格分隔的动态输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36826781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com