VMTEST - Thử máy
Tác giả: hieult
Ngôn ngữ: C++
#include <set>
#include <map>
#include <cmath>
#include <deque>
#include <queue>
#include <stack>
#include <cstdio>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <iostream>
#include <algorithm>
using namespace std;
#define Rep(i,n) for(typeof(n) i = 0; i < (n); ++i)
#define Repd(i,n) for(typeof(n) i = (n)-1; i >= 0; --i)
#define For(i,a,b) for(typeof(b) i = (a); i <= (b); ++i)
#define Ford(i,a,b) for(typeof(a) i = (a); i >= (b); --i)
bool isword(string s) {
int len = s.length();
Rep(i, len) if (!isalpha(s[i])) return false;
return true;
}
bool isnumber(string s) {
int minus = 0, dot = 0, posminus = -1, posdot = -1;
int len = s.length();
Rep(i, len) {
if (s[i] == '-') {
++minus;
posminus = i;
}
else if (s[i] == '.') {
++dot;
posdot = i;
}
else if (!isdigit(s[i])) return false;
}
if (minus > 1 || dot > 1) return false;
if (minus == 1 && posminus != 0) return false;
return true;
}
double convert(string s) {
stringstream ss;
ss << s;
double r;
ss >> r;
return r;
}
string line, s;
vector<string> a;
void process() {
int n = a.size();
if (n == 0) {
puts("Error!");
return;
}
double sum = 0;
string cat = "";
bool allnumber = true, allword = true;
Rep(i, n) {
if (isnumber(a[i])) {
sum += convert(a[i]);
allword = false;
}
else if (isword(a[i])) {
cat = cat + a[i];
allnumber = false;
}
else {
puts("Error!");
return;
}
}
if (allword) cout << cat << endl;
else if (allnumber) printf("%.6lf\n", sum);
else puts("Error!");
}
int main() {
while (getline(cin, line) && line != "?") {
a.clear();
istringstream iss(line);
while (iss >> s) a.push_back(s);
process();
}
return 0;
}