算法竞赛入门经典第二版课后习题 3-2分子量 # include <iostream> # include <cstdlib> # include <memory.h> # include <cctype> using namespace std; //分子量 分子数不一定是个位数 const char name[] = "CHON"; double fweight[] = {12.01, 1.008, 16.00, 14.01}; int main() { char c[5]; string s; cin>>s; double sum = 0.0,weight = 0.0; int num = 0; for(int i = 0; i < s.size(); i++)//遍历字符串,找出分子 { //isalpha()可以判断字符是不是英文字母,如果是则返回非零,如果不是则返回0,头文件<cctype> if(isalpha(s[i])) { for(int j = 0; j < 4; j++)//将分子对应的分子量赋给weight { if(s[i] == name[j]) { weight = fweight[j]; break; } } num = 0;//将用来移位的变量清零 if(isalpha(s[i+1]) || i+1 == s.size()) sum += weight; else { //isdigit()函数检查其参数是否是十进制整数,头文件为<cctype> for(int k = i+1; k < s.size() && isdigit(s[k]); k++) { c[num] = s[k]; num++; } cout<<"atof(c) = "<<atof(c)<<endl; sum += atof(c)*weight; //atof()函数将字符串转换为浮点数 所使用的头文件是<cstdlib> } memset(c,'\0',sizeof(c)); } else continue; } cout<<sum; return 0; }