我可以使用以下代码输入字符串:
string str;
getline(cin, str);
但我想知道如何对可以作为输入提供的单词数量设置上限。
答案 0 :(得分:1)
仅使用getline
甚至read
,您无法完成所要求的工作。如果要限制单词数,可以使用简单的for
循环和运算符中的流。
#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 :(得分:0)
getline()
读取字符并且不知道字是什么。单词的定义可能会随着语境和语言而改变。您需要一次读取一个字符流,提取符合您单词定义的单词,并在达到限制时停止。
答案 2 :(得分:0)
您可以一次读取一个字符,也可以只处理字符串中的1000个字符。
您可以在std :: string上设置限制并使用它。
答案 3 :(得分:0)
希望这个程序可以帮助你。此代码也可以在一行中处理多个单词的输入
#include<iostream>
#include<string>
using namespace std;
int main()
{
const int LIMIT = 5;
int counter = 0;
string line;
string words[LIMIT];
bool flag = false;
char* word;
do
{
cout<<"enter a word or a line";
getline(cin,line);
word = strtok(const_cast<char*>(line.c_str())," ");
while(word)
{
if(LIMIT == counter)
{
cout<<"Limit reached";
flag = true;
break;
}
words[counter] = word;
word = strtok(NULL," ");
counter++;
}
if(flag)
{
break;
}
}while(counter>0);
getchar();
}
截至目前,该程序的限制只能接受5个单词并将其放入字符串数组中。
答案 4 :(得分:0)
以下内容仅读取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;}
);
答案 5 :(得分:-2)
使用以下功能:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms684961%28v=vs.85%29.aspx
您可以指定第三个参数来限制读取字符的数量。