c++得一个问题 关于写一个化学式

来源:百度知道 编辑:UC知道 时间:2024/05/24 08:08:48
问题是这样的,比如水的化学式是H2O,表示出来是这样;
'H2O' would return
'H', 'O' (the elements)
2, 1 (the number of atoms)
'NaCl' would return
'Na', 'Cl' and 1, 1
'C2H5OH' returns
'C', 'H', 'O' and 2, 6, 1.

下面的代码可以完成楼主的功能要求,以备参考。

#include <iostream>
#include <map>
#include <string>

using namespace std;

void Output(char *molecular_formula);

void main(int argc, char *argv[])
{
int i;
for(i = 1; i < argc; i++)
{
Output(argv[i]);
}
}

void Output(char *molecular_formula)
{
int k = 0;
int n = 0;
char *p;
char molecular[8];
string str;
map<string, int> m;
map<string, int>::iterator it;
// 逐项解析各原子符号,并假定原子符号是以大写字母开始,后跟零个或多个小写字母的串
for(p = molecular_formula; *p != '\0'; p++)
{
if (*p >= 'A' && *p <= 'Z')
{ // 找到一个新的原子符号
if (k > 0)
{ // 将旧的原子符号保存
molecular[k] = '\0';
str = molecular;
it = m.find(str);
if (it != m.end())
{
n += it->second;
m.eras