我正在尝试构建一个字符串向量。 一些字符串还包含空格。 这就是我使用getline(cin,string_name)的原因。 我的代码看起来像
for(int i=0;i<n;++i)
{
getline(cin, s);
vec.push_back(s);
}
当我接受输入时
ADAM BOB JOHNSON
取两个输入词后停止,显示的矢量内容为
(HERE SPACE IS DISPLAYED)ADAM BOB
它是什么意思。它是否将NULL字符串作为第一个字符串的输入? 如果有人告诉我如何取出字符串并显示它,那将会非常有用。谢谢。
答案 0 :(得分:1)
作者Abhijit, 显然,您的信息还不够。假设你的代码是用C ++编写的,我做了这个测试cpp:
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::vector<std::string> vec;
std::string s;
int n = 1;
for(int i = 0; i < n; ++i)
{
getline(std::cin, s);
vec.push_back(s);
std::cout << vec.at(i) << std::endl;
}
return 0;
}
使用g ++编译并在输入时使用“ADAM BOB JOHNSON”字符串。一切按计划进行,输出与输入完全相同。所以我在这里看不到任何错误。
很抱歉,由于目前声誉不足,无法发表评论。
UPD:发现了这个问题。 getline首先获得'\ n',我们在'3'之后离开(这是std :: cin&gt;&gt; n;所需的)因此,你只需要忽略一个字符串。代码:
#include <iostream>
#include <vector>
#include <string>
int main()
{
int n;
std::cin >> n;
std::vector<std::string> vec;
std::string s;
std::getline(std::cin, s);
for(int i = 0; i < n; ++i)
{
std::getline(std::cin, s);
vec.push_back(s);
// std::cout << vec.at(i) << std::endl;
}
for(int i=0;i<n;++i){
std::cout << vec[i] <<" " << std::endl;
}
return 0;
}
对我来说很好。
是的,@ pmaxim98首先做到了,抱歉,正在编辑回复并没有看到你的评论。