题目大意:
输入一个n表示有n组数据,对于每一组数据输入一串化学式,求分子质量,这里只有4分子:C N O H 对应的:12.01 1.008 16.00 14.01 最后输出分子质量。
解题思路:
遇到分子就把他后面的数字字符串转换为数字和分子质量相乘,如果没有数字则默认为1个,这里用字符流转换一下string和double即可。我这里用map映射了一下分子质量,用数组也是可以的。AC代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <sstream>
#include <map>
using namespace std;
int main()
{
map<char,double > mp;
mp['C']=12.01,mp['H']=1.008,mp['O']=16,mp['N']=14.01;
int n;
cin>>n;
while(n--)
{
string s;
cin>>s;
double ans=0;
for(int i=0;i<s.length();i++)
{
if(isalpha(s[i]))//如果遇到字母把后面的数字字符变为数字
{
string t;
for(int j=i+1;isdigit(s[j]);j++)//是数字就++
t+=s[j];
double num;
if(isdigit(t[0]))//防止后面没有数字的情况
{
stringstream ss;//字符流转换一下两种变量
ss<<t;
ss>>num;
}
else
num=1;
ans+=num*mp[s[i]];//分子质量*个数
}
}
printf("%.3lf
",ans);
}
return 0;
}