用了isdigit() isalpha()
后还是比较简单的。
#include <cstdio>
#include <cstring>
#include <cctype>
using namespace std;
const int maxn = 80;
char s[maxn + 10];
double f(char);
int main()
{
int t;
scanf("%d", &t);
while(t--)
{
double ans = 0;
scanf("%s", s);
int len = strlen(s);
for(int i = 0; i < len; )
{
if(isalpha(s[i]))
{
double base = f(s[i]), num = 0;
while(isdigit(s[++i]))
{
num *= 10;
num += s[i] - '0';
}
if(num == 0) ans += base;
else ans += base * num;
}
}
printf("%.3f\n", ans);
}
return 0;
}
double f(char ch)
{
const double c = 12.01, h = 1.008, o = 16.00, n = 14.01;
switch(ch)
{
case 'C': return c;
case 'H': return h;
case 'O': return o;
case 'N': return n;
}
}