题意:输入字符串求分子量,例如C2H2,CHO2CH,C23H22O11
思路:将输入的字符切割,从左往右依次计算,比如CH22O2,
先计算C,发现下一个不为数字,那么C的个数肯定为1,直接计算;
H22,先提取元素H,然后提取出22,遇到O,说明提取结束,个数为22;
O11同上。
注意:提取多位数就是原数*10+新提取的数的循环
1 #include "stdio.h"
2 #include "stdlib.h"
3 #include "string.h"
4 int main()
5 {
6 int n,i,j,ex,tag,beishu;
7 float sum,res,weight;
8 char str[80],name,num;
9 scanf("%d",&n);
10 while(n--)
11 {
12 sum=0,weight=0,res=0,num=1;
13 ex=0,tag=0,beishu=1,res=0;
14 scanf("%s",str);
15 for(i=0;i<=strlen(str);i++)
16 {
17 if(!(str[i]<='9'&&str[i]>='0'))//字母
18 {
19
20 res=res+sum*weight;
21 weight=0,sum=0;
22 name=str[i];
23 switch (name)
24 {
25 case 'C':
26 {
27 weight=12.01;
28 break;
29 }
30 case 'H':
31 {
32 weight=1.008;
33 break;
34 }
35 case 'O':
36 {
37 weight=16.00;
38 break;
39 }
40 case 'N':
41 {
42 weight=14.01;
43 break;
44 }
45 default: break;
46 }
47 if(!(str[i+1]<='9'&&str[i+1]>='0'))//CH
48 {
49 sum=1;
50 }
51 }
52 else
53 if(str[i]<='9'&&str[i]>='0')
54 {
55 // printf("str[i]=%d\n",str[i]-'0');
56 num=str[i]-'0';
57 // printf("num=%d\n",num);
58 sum=sum*10+num;
59 // printf("\tsum=%.3f\n",sum);
60 }
61 // else //if(str[i+1]!='\0')
62 // {
63 // num=1;
64 // sum=sum+weight*num;
65 // }
66 }
67 printf("%.3f\n",res);
68 }
69 }