C++ 如何填写C++;从键盘输入的向量?

C++ 如何填写C++;从键盘输入的向量?,c++,vector,user-input,C++,Vector,User Input,诀窍在于我还不知道绳子的大小。我需要能够要求用户输入一个单词,并且这个单词将存储在一个向量中 int main() { vector<char> word (80); // get the word from user for(int i=0 ; getchar() != '\n' ; i++) { cin >> word[i]; } // print the word from

诀窍在于我还不知道绳子的大小。我需要能够要求用户输入一个单词,并且这个单词将存储在一个向量中

int main()
{

    vector<char> word (80);

    // get the word from user
    for(int i=0 ; getchar() != '\n' ; i++)
        {
            cin >> word[i];
        }
    // print the word from user
    for(int i=0 ; i<=word.size() ; i++)
        {
            cout << word[i] << endl;
        }


    return 0;
}
intmain()
{
向量词(80);
//从用户处获取单词
对于(int i=0;getchar()!='\n';i++)
{
cin>>单词[i];
}
//打印来自用户的单词
对于(inti=0;i
std::string str;
//我不知道你是想要一句话还是一句话。
//这是一条线
std::getline(std::cin,str);
//这是一个词
//std::cin>>str;
向量词(str.begin(),str.end());

我认为这个问题经常被问到和回答。显而易见的方法是

std::vector<char> word{std::istreambuf_iterator<char>(std::cin),
                       std::istreambuf_iterator<char>()};
std::vector word{std::istreambuf_迭代器(std::cin),
std::istreambuf_迭代器()};

……或是用C++ 2003编译的等价版本,但为了避免最烦琐的解析而调整。

如果您只想读取部分输入,例如,仅读取一行,则需要稍微调整它:

for (std::istreambuf_iterator<char> it(std::cin), end;
     it != end && *it != '\n'; ++it)
{
    word.push_back(*it);
}
++it;
对于(std::istreambuf_迭代器it(std::cin),结束;
it!=结束&&*it!='\n';++it)
{
字。推回(*it);
}
++它;

无论哪种情况,关键都是让
std::vector
增长到所需的大小。

这不就是标准输入的全部吗?我认为这不是他想要的。主要是我需要修复
的用法来使用
。你想要什么解释?可以使用一对迭代器从序列构造向量。可以使用
std::istreambuf_迭代器将输入流转换为
char
s序列,并且[通常]使用
std::cin
读取“键盘”。因此,这段代码将“从键盘填充向量”。@BenjaminLindley:是的,这将获得整个输入。我也不知道这是否是他想要的。我也不认为他提供了很多他想要的细节:“字符串”,“输入”,“单词”-谁知道他想要什么。他的代码没有这两个功能,但似乎是成行的。我为混淆道歉,但很简单,我想捕获从键盘输入的单词、任何单词、字符串等。例如:假设我想在向量中添加“显而易见”一词,以便我以后可以操纵向量。所以我输入“显而易见”,然后按回车键,我有一个大小为7的向量,里面有“显而易见”这个词。这个词对你意味着什么?它从哪里开始,在哪里停止?如果你刚读了一个<>代码> STD::String ,C++标准就回答了这个问题:一个单词从第一个非空白开始,然后以第一个空格结束。将其读入变量是很简单的:
std::string word;如果(std::cin>>word){now_你在(word);}
(你总是需要检查你的输入是否成功)。如果您想用characterwise来模拟这一点,可以使用
标题中的
std::isspace()
for (std::istreambuf_iterator<char> it(std::cin), end;
     it != end && *it != '\n'; ++it)
{
    word.push_back(*it);
}
++it;