繁体   English   中英

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

[英]C++ - Read in input one word at a time

我正在尝试一次读入用户输入的单词,直到用户打印回车。 目前,此方法可以读取直到按下回车键,但一次只能读取一个字符。 关于如何通过单词阅读的任何建议?

#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;
 }

您可以尝试使用

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;
}

这是使用getlinestd::string容器的另一种紧凑方式

#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';
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM