这一题只需要用一个数组存储每一个元素的个数。这里格外需要注意的是,题中讲了数字最大不超100(我一开始还傻傻的为了正确存数字特意写了30+行多余代码)
这里还有几点需要注意的,一个是sum最好是用double来存,另外判断字符是否相同的语法容易出错。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#define N 100+5
int search(char ch){ //用于查找某字符在字符数组里的下标位置
if(ch == 'C') return 0;
if(ch == 'H') return 1;
if(ch == 'O') return 2;
if(ch == 'N') return 3;
}
int main(){
char s[N];
int num[4], T;
double sum = 0.0;
scanf("%d", &T);
while(T--)
{
memset(num,0,sizeof(num));
scanf("%s",s);
for(int i = 0; i < strlen(s); i++)
{
if(isalpha(s[i]))
if (isdigit(s[i + 1]) && isdigit(s[i + 2]))
num[search(s[i])] += 10 * (s[i + 1] - '0') + (s[i + 2] - '0');
else
num[search(s[i])] += isdigit(s[i + 1]) ? s[i + 1] - '0' : 1;
// printf("num = %d %d %d %d\n",num[0],num[1],num[2],num[3]);
}
sum=12.01*num[0]+1.008*num[1]+16*num[2]+14.01*num[3];
printf("%.3f\n",sum);
}
return 0;
}