要求:1:不带括号的分子式求解
2:带一层括号的分子式求解
不带括号的分子式
用high和low记住每次扫描的最高位和最低位,不能求解多为整数时的系数
# include<stdio.h>
# include<string.h>
typedef struct
{
char w[10][2];
int num[10];
} ele;
int flag(char a[2],ele b) //原子质量b.num[m],确定m的值
{
int m=0,i,j;
for(i=0;i<10;i++)
{ if(a[1]!='\0') //所输入元素有两个字母
{
if(a[0]==b.w[i][0])
if(a[1]==b.w[i][1])
{
m=i;break;
}
}
else //所输入元素只有一个字母
{
if(a[0]==b.w[i][0])
{
m=i;
break;
}
}
}
return(m);
}
int find(char s[10],int low) //找到每次扫描的最高下标
{
int high;
high=low+1; //赋初值
while(s[high]!='\0')
{
if(s[high+1]=='\0')
{
if(s[high]>='A'&&s[high]<='Z')
return(high);
else
{
high++;
return(high);
}
}
else
if(s[high]>='A'&&s[high]<='Z')
return(high);
else
high++;
}
if(s[high]=='\0') //已经扫描到最后一位
{
return(high);
}
}
int sum(char s[38],ele b) //求总的分子量
{
int quality=0;
int low=0,j=0,m,high,t;
char a[2];
high=find(s,0);
do //s[38]
{
t=1;
a[0]='\0';
a[1]='\0';
do
{
while(low<high)
{
if(a[0]=='\0')
{
a[0]=s[low];
low++;
if(s[low]>='a'&&s[low]<='z')
a[1]=s[low];
else
break;
}
else
{
low=high;
break