输入流 - c++ 怎么输入未知数目个数字进vector,以回车结束输入?
PHPz
PHPz 2017-04-17 13:20:57
0
3
779

C++初学学生,求用简单的语言说明,非常感谢!

一行double带小数点的数字,不定项数量,每个数字之间用不定项个空格隔开,以回车结束输入,放进一个vector里。

比如这样

1.1 2.2 3.3 4.4 5.5 回车

本来是想用cin来跳过空格但是也会跳过回车,如果用cin.get的话得到的是char型,转成double的话小数点后面会丢失。现在的想法就是getline得到一整行,然后一位数一位数地分析,空格丢掉,连在一起的数字重新整合成一个double。

又想了一阵子然后用unget()做到了..不清楚有没有更好一点的办法.

vector v1; char t; do //input first line { cin.unget(); cin >> count; v1.push_back(count); } while ((t=cin.get())!='\n');

初学c++,可能这问题很蠢,但是已经搜索了快两天都不知道怎么解决,求教更简便一点的方法…

PHPz
PHPz

学习是最好的投资!

全部回覆 (3)
小葫芦

方法一,可以分多行输入,每行不限个数,自动忽略输入中的空白符(空行、空格、制表符)。

std::vector v; for (double d; std::cin >> d; v.push_back(d)) {}

方法二,仅输入一行,自动忽略输入中的空白符(空行、空格、制表符)。

#include  std::vector v; std::string line; std::getline(std::cin, line); std::istringstream iss(line); for (double d; iss >> d; v.push_back(d)) {}

方法三,效果同方法一。

#include  std::istream_iterator in(std::cin), eof; std::vector v(in, eof);

注:把上述方法中的std::cin换成任一std::istream类型的变量或其子类的变量效果相同。例如换成std::ifstream类型的变量即可读取文件。

    洪涛

    不考虑其他的情况的话:

    1. 先用【空格】分出来每个小数,放在一个vector

    2. 用atof()逐个转换成double

    3. 转换一个就放一个进vector

    优化:

    一边解析,一边转换,一边push_back进vector,一次循环搞定。

      PHPzhong

      C++流式输入风格

      double x; while(!cin.eof()) { cin>>x; v.push_back(x); }

      C风格输入

      double x; while(scanf("%lf",&x)!=EOF) v.push_back(x); /* EOF是个库中的宏定义 #define EOF (-1) */

      以上方法适用于从文件中读入,不适合控制台输入(因为控制台无法知道你到底输完了没)
      如果是控制台输入,可以先读入一整行,然后再逐个读入:

      #include  #include  #include  #include  using namespace std; int main() { #define SIZE_BUFF (100) char s[SIZE_BUFF],*p=s; cin.getline(s+1,SIZE_BUFF); vector v; double x; for(s[0]=' ';*p;++p) { if(*p!=' ') continue; while(*++p==' '); sscanf(p,"%lf",&x); v.push_back(x); } for(vector::iterator i=v.begin();i!=v.end();++i) printf("%lf\n",*i); return 0; }

      实现得不是很优美,将就一下吧。

        最新下載
        更多>
        網站特效
        網站源碼
        網站素材
        前端模板
        關於我們 免責聲明 Sitemap
        PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!