while(cin >> / *?* /)ステートメントを使用して不特定数の複数行を入力するのは不便です。Ctrl-Zを入力すると、入力が終了します。入力できる情報セットは1つだけで、後続のセットは入力できません。 。
インターネットでさまざまな方法を検索したところ、以下の方法がより効果的であることがわかりました。(改善後、ベクターに格納されます(インターネット上の配列にもメソッドがあります))次に
、mainおよびheaderの処理メソッドを示します。
主に
例としてC ++ Primer Exercise 3.36(b)(つまり、ベクトルを比較する)を取り上げます。
#include <iostream>
#include <vector>
#include <string>
#include <sstream> // std::istringstream
using namespace std;
int main()
{
vector<int> vint1, vint2;
string num1, num2;
cout << " First vector:";
getline(cin, num1);
istringstream is1(num1);
int i;
while (is1 >> i)
vint1.push_back(i);
cout << "Second vector:";
getline(cin, num2);
istringstream is2(num2);
int j;
while (is2 >> j)
vint2.push_back(j);
if (vint1.size() != vint2.size())
cout << "vint1 is unequal to vint2" << endl;
else
{
int s=0;
auto it1 = vint1.begin();
auto it2 = vint2.begin();
for (int k = 0; k != vint1.size(); k++)
{
if (*it1 == *it2) s++;
++it1;
++it2;
}
if (s == vint1.size())
cout << "vint1 is equal to vint2" << endl;
else cout << "vint1 is unequal to vint2" << endl;
}
return 0;
}
重要な部分(L12-16)は
getline(cin, num1);
istringstream is1(num1);
int i;
while (is1 >> i)
vint1.push_back(i);
isringstream関数を実現するには、ライブラリsstreamが必要です。もちろん、whileステートメントを使用してベクターに継続的に格納する必要があります。それ以外の場合、getlineの後に取得された文字列コンテンツの最初の番号のみが保存されます。
ヘッダーに
以下は、関数を整数cinvec_intの行ベクトルに定義し、浮動小数点数をcinvec_doubleの行ベクトルに定義します。
#ifndef CINVEC
#define CINVEC
#include <iostream>
#include <vector>
#include <string>
#include <sstream> // std::istringstream
std::vector<int> cinvec_int(std::string cin_int)
{
getline(std::cin, cin_int);
std::vector<int> vint;
std::istringstream is(cin_int);
int i;
while (is >> i)
vint.push_back(i);
return vint;
}
std::vector<double> cinvec_double(std::string cin_double)
{
getline(std::cin, cin_double);
std::vector<double> vdou;
std::istringstream is(cin_double);
double i;
while (is >> i)
vdou.push_back(i);
return vdou;
}
#endif // !CINVEC
- このヘッダーの呼び出しについては、[C ++入門(第5版)演習]演習プログラム-第5章(第5章)演習5.17を参照してください。
- 成功するまでにかなり長い間デバッグしているので、私のブログのデバッグcinvec.h(C ++ヘッダーファイルで定義された関数)の感想と経験を参照してください。
こちらもご覧ください
テディヴァンジェリーのナビゲーションページ
[C ++入門(第5版)演習]演習プログラム-第3章(第3章)
[C ++入門(第5版)演習]エクササイズプログラム-第5章(第5章)