满意答案
qpf721
2018.04.07
采纳率:53% 等级:10
已帮助:466人
#include
#include
//这里的数组标记方法极好,把寻找字母和寻找字母的分子量全给表示出来!注意精髓,是数组的顺序能派上大用场
double array[] = {0, 0, 12.01, 0, 0, 0, 0, 1.008, 0, 0, 0, 0, 0, 14.01, 16.00};
char s[20];
int main(void)
{
int i;
int length;
double sum = 0;
char x;
gets (s);
//若输入的是字符串,判断其长度可以不用strlen了,可用是否为'\0'
for (i = 0; s[i] != '\0'; ++i)
{
if (isalpha(s[i]))
{
//注意这里的技巧,把当前的那个字母保存下来,如果下一位或者下两位是数字好寻找是哪个字母的。
x = s[i];
sum += array[s[i] - 'A'];
}
else
{
int n = s[i] - '0';
if (isdigit(s[i + 1]))
{
n = n * 10 + s[i + 1] - '0';
i++;
}
sum += array[x - 'A'] * (n - 1);
}
}
printf("%.3lf",sum);
return 0;
}追问: s【i】-‘A’是什么意思?
追答:看到全局变量double array那个数组没有?你用C H O N模拟一下就知道了。假设字符串输入的第一个字符是C,array[a[i]-'A']→array['C'-'A']→array[67-65]→array[2]→12.01
追问: s【i】!="\0"
追问: 是我输错了
追问: 没通过
追问: 是在学校的平台上提交不上去
00分享举报