矢量字符串的Getline

时间:2012-09-02 06:23:32

标签: c++ string vector getline

我有一个矢量字符串:

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

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

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

如何解决?

4 个答案:

答案 0 :(得分:2)

你的第一个问题是你正在声明一个三维结构。我怀疑你只打算两个级别。下一个问题是你正在使用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]);

答案 1 :(得分:1)

for(int i = 0; i < 20; i++) {
    for(int k = 0; k < 100; k++) {
        getline(std::cin,name[i][k]);
    }
}

如果你想循环它。

答案 2 :(得分: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 
}

答案 3 :(得分: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;
}
相关问题