私はベクトル文字列を持っています:
vector <string> name[20][100];
に入力したいname[0][0]
のですが、getlineが機能していません。私のコード:
cin.getline(name[0][0], sizeof(name[0][0]))
それを修正する方法は?
最初の問題は、3次元構造を宣言していることです。あなたは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]);
for(int i = 0; i < 20; i++) {
for(int k = 0; k < 100; k++) {
getline(std::cin,name[i][k]);
}
}
ループしたい場合。
これ を実行すると、これ、またはこれ、およびこれ 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;
}
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
}