C++初学学生,求用简单的语言说明,非常感谢!
一行double带小数点的数字,不定项数量,每个数字之间用不定项个空格隔开,以回车结束输入,放进一个vector里。
比如这样
1.1 2.2 3.3 4.4 5.5 回车
本来是想用cin来跳过空格但是也会跳过回车,如果用cin.get的话得到的是char型,转成double的话小数点后面会丢失。现在的想法就是getline得到一整行,然后一位数一位数地分析,空格丢掉,连在一起的数字重新整合成一个double。
又想了一阵子然后用unget()做到了..不清楚有没有更好一点的办法.
vector<double> v1;
char t;
do //input first line
{
cin.unget();
cin >> count;
v1.push_back(count);
} while ((t=cin.get())!='\n');
初学c++,可能这问题很蠢,但是已经搜索了快两天都不知道怎么解决,求教更简便一点的方法…
方法一,可以分成多行輸入,每行不限個數,自動忽略輸入中的空格符(空白行、空格、製表符)。
方法二,只輸入一行,自動忽略輸入中的空白符號(空白行、空格、製表符)。
方法三,效果同方法一。
註:把上述方法中的
std::cin
換成任一std::istream
類型的變數或其子類別的變數效果相同。例如換成std::ifstream
類型的變數即可讀取檔案。不考慮其他的情況的話:
先用【空格】分出來每個小數,放在一個vector裡
用atof()逐一轉換成double
轉換一個就放一個進vector
最佳化:
一邊解析,一邊轉換,一邊push_back進vector,一次循環搞定。
C++串流輸入風格
C風格輸入
以上方法適用於從文件中讀入,不適合控制台輸入(因為控制台無法知道你到底輸完了沒)
如果是控制台輸入,可以先讀入一整行,然後再逐個讀入:
實現得不是很優美,將就一下吧。