我有一个向量字符串:
vector <string> name[20][100];
我想输入name[0][0]
,但 getline 不起作用。我的代码:
cin.getline(name[0][0], sizeof(name[0][0]))
如何解决?
您的第一个问题是您要声明一个三维结构。我怀疑你只打算两个级别。下一个问题是您正在使用std::basic_istream<…>::getline
,这取决于您提前准备缓冲区空间(您没有这样做)。自由函数形式 ,std::getline
更简单、更安全:
std::string name[20][100];
for (int i = 0; i < 20; ++i)
for (int j = 0; j < 100; ++j)
getline(std::cin, name[i][j]);
for(int i = 0; i < 20; i++) {
for(int k = 0; k < 100; k++) {
getline(std::cin,name[i][k]);
}
}
如果你想循环它。
您需要使用另一种getline
方法。
name[0][0].resize(1);
std::getline(std::cin, name[0][0][0]);
std::cout << name[0][0][0];
getline
您使用的方法char *
不需要std::string
。
你也有字符串向量数组。我认为您只需要字符串向量。
std::vector<std::string> name;
name.resize(20); // will create 20 std::strings (to keep 20 names)
for (int i = 0; i < name.size(); ++i) {
std::getline(std::cin, name[i]); // fill all of 10 std::strings
}
一旦你这样做了 vector<string> name
,你几乎也可以这样做name[0]="a name"
,或者这个name.push_back("a name")
,还有这个 for (int i = 0; i < 5; ++i) getline(cin,name[i])
然而,你的意思是这样做吗?
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
vector<string> name;
name.resize(21);
//name.push_back("a name");
//name[0]="a name";
for (int i = 0; i < 5; ++i)
{
cout<<"input name (hit enter twice when done) > ";
getline(cin,name[i]);
//cin.clear();
//cin.ignore( 1000, '\n' );
}
for ( i = 0; i < 5; ++i) cout<<"name "<<i+1
<<" = "<<name[i]
<<"\n";
return 0;
}