UVA 1586

在这里插入图片描述在这里插入图片描述

题目大意:

输入一个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;
}
原文地址:https://www.cnblogs.com/Hayasaka/p/14294236.html