次のコードを使用して文字列を入力できます。
string str;
getline(cin, str);
しかし、入力として与えられる単語数に上限を設ける方法を知りたいです。
getline
justまたは even で求めていることを行うことはできませんread
。単語数を制限したい場合は、単純なfor
ループと stream in 演算子を使用できます。
#include <vector>
#include <string>
int main()
{
std::string word;
std::vector<std::string> words;
for (size_t count = 0; count < 1000 && std::cin >> word; ++count)
words.push_back(word);
}
これにより、最大 1000 語が読み取られ、ベクトルに詰め込まれます。
一度に 1 文字を読み取ることも、文字列から 1000 文字のみを処理することもできます。
std::string に制限を設定して使用できる場合があります。
count
以下は、ベクトル内のスペースで区切られた単語のみを読み取り、他の単語を破棄します。
ここでは、句読点も「単語」がスペースで区切られているため、ベクトルから削除する必要があります。
std::vector<std::string> v;
int count=1000;
std::copy_if(std::istream_iterator<std::string>(std::cin),
// can use a ifstream here to read from file
std::istream_iterator<std::string>(),
std::back_inserter(v),
[&](const std::string & s){return --count >= 0;}
);
次の関数を使用します。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms684961%28v=vs.85%29.aspx
3 番目の引数を指定して、読み取られる文字の量を制限できます。