C ++ - 一次读入一个输入的单词

时间:2015-10-01 23:54:12

标签: c++ cin

我尝试一次读取一个用户输入,直到用户打印输入。目前,这在读取时工作,直到输入被按下,但一次只读取一个字符。有关如何通过单词阅读的任何建议吗?

#include<iostream>
#include<string.h>
using namespace std;

int main(){

    char a[256];
    int i=0;

    do{
        cin>>a[i++];
     } while(cin.peek() != '\n');

    for(int j= 0 ; j < i ; j++)
        cout<< a[j] << " "; 
    return 0;
 }

2 个答案:

答案 0 :(得分:1)

您可以尝试使用

std::string a[256];

而不是

char a[256];

然而,使用

的逻辑
while(cin.peek() != '\n');

有缺陷。如果在点击 Enter 之前输入空格字符,程序将等待您输入更多输入。

最好使用std::getline()读取一行文字,然后使用stringstream解析文本行。

我还建议使用std::vector<std::string>代替std::string数组。

#include <iostream>
#include <sstream>
#include <vector>
#include <string>

int main()
{
   std::vector<std::string> words;

   std::string line;
   getline(std::cin, line);

   std::istringstream str(line);
   std::string word;
   while ( str >> word )
   {
      words.push_back(word);
   }

   for ( auto& w : words )
   {
      std::cout << w << " "; 
   }

   return 0;
}

答案 1 :(得分:0)

以下是使用getlinestd::string s容器

的另一种紧凑方式
#include <iostream>
#include <iterator>
#include <algorithm>
#include <string>

int main() 
{
    std::vector<std::string> tokens;
    std::copy(std::istream_iterator<std::string> {std::cin}, {}, 
              std::back_inserter(tokens));
    for(auto && elem: tokens)
        std::cout << elem << '\n';
}