#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
template<typename T>
bool validatedCoercion(string input, T &dest) {
istringstream iss(input);
if(!(iss >> dest)) return false;
return iss.rdbuf()->in_avail() == 0;
}
vector<string> splitByCommaOrSpace(const string& input) {
vector<string> result;
string buffer;
bool ok = true;
for(char c : input) {
if((c == ',' || isspace(c)) && buffer.size() != 0) {
result.push_back(buffer);
buffer = "";
} else {
buffer += c;
}
}
if(buffer.size() != 0) {
result.push_back(buffer);
}
return result;
}
int main()
{
const int N = 3;
double x[N] = {-1};
string line;
getline(cin, line);
if(!cin) {
cerr << "An error occured while reading from stdin." << endl;
}
auto doubles = splitByCommaOrSpace(line);
if(doubles.size() != N) {
cerr << "Invalid number of input, expected " << N << " got " << doubles.size() << endl;
}
int i = 1;
for(string& s : doubles) {
if(!validatedCoercion(s, x[i-1])) {
cout << "column " << i << " is not a valid number.\n";
}
i++;
}
i = 1;
for(double d : x) {
if(x > 0) {
cout << "number " << i << " is positive.\n";
} else {
cout << "number " << i << " is invalid (not strictly positive).\n";
}
i++;
}
i = 1;
for(double d : x) {
cout << "number " << i++ << " is " << x[i-1] << "\n";
}
return 0;
}
例1:
12.32, 43,2
number was 1 correct.
number was 2 correct.
number was 3 correct.
number 1 is 12.32
number 2 is 43
number 3 is 2
例2:
1.3 23 4
number was 1 correct.
number was 2 correct.
number was 3 correct.
number 1 is 1.3
number 2 is 23
number 3 is 4
例3:
1 2d 3sd
number was 1 correct.
number was 2 wrong.
number was 3 wrong.
number 1 is 1
number 2 is 2
number 3 is 3
例5:
a b
Invalid number of input, expected 3 got 2
number was 1 wrong.
number was 2 wrong.
number 1 is 0
number 2 is 0
number 3 is 0
例6(更新されたコード):
1 -2 a
column 3 is not a valid number.
number 1 is positive.
number 2 is positive.
number 3 is positive.
number 1 is 1
number 2 is -2
number 3 is 0
は、私はあなたがこれで長い道を行くことができると思います。
"更新:コードは以下の回答に基づいています"これを行う場合は、回答者に通知しているコメントを残してください。その作者はこのスレッドを爽やかに座っていることはまずありません。そうでなければ、質問のインデックスを正確なタイミングで再表示しなければ、OPを編集したことに気付かないでしょう。 –
プログラムに「ダブルス」を入力することはできません。 'double'データ型で表すことができる_numbers_のみを入力できます。私はニッピピングではない:あなたは表現と意味の違いを理解し、理解しなければならない。そして表現の異なるカテゴリー間の違い。 –