2

我有一个向量字符串:

vector <string> name[20][100];

我想输入name[0][0],但 getline 不起作用。我的代码:

cin.getline(name[0][0], sizeof(name[0][0]))

如何解决?

4

4 回答 4

2

您的第一个问题是您要声明一个三维结构。我怀疑你只打算两个级别。下一个问题是您正在使用std::basic_istream<…&gt;::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]);
于 2012-09-02T06:37:36.310 回答
1
for(int i = 0; i < 20; i++) {
    for(int k = 0; k < 100; k++) {
        getline(std::cin,name[i][k]);
    }
}

如果你想循环它。

于 2012-09-02T06:31:32.820 回答
0

您需要使用另一种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 
}
于 2012-09-02T06:27:28.730 回答
0

一旦你这样做了 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;
}
于 2012-09-02T07:58:35.157 回答