2

私はベクトル文字列を持っています:

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

に入力したいname[0][0]のですが、getlineが機能していません。私のコード:

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

それを修正する方法は?

4

4 に答える 4

2

最初の問題は、3次元構造を宣言していることです。あなたは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

これ を実行すると、これ、またはこれ、およびこれ 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 に答える
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 に答える