利用数组前移来计算一串数据加减乘除
//获取输入数据
char szData[256] = {0}; //保存输入的数据
char szDataTemp[128] = {0};
int nData[128] = {0}; //保存输入的数字
char *pData = NULL;
char szFuhao[128] = {0};//保存符号
int i,j,k;
i = 0;//字符串长度
pData = szData;
while(true) //获取输出内容
{
*pData = getchar();
if(*pData == '\n')
{
break;
}
pData++;
}
//输出测试
//for(j = 0;j<i;j++)
//{
// printf("%c",szData[j]);
//}
//分离获取到的数据内容
int nFlag = 0;j = 0;
pData = szData;
for(k = 0;k<strlen(szData);k++)
{
if(isalnum(*pData))
{
szDataTemp[j] = *pData;
j++;
}else{
szDataTemp[j] = '\0';
nData[nFlag] = atoi(szDataTemp);
nFlag++;
j = 0;
}
pData++;
}
//分离符号
pData = szData;
i = 0;
for(k=0;k<strlen(szData);k++)
{
if(isalnum(*pData))
{
}else{
szFuhao[i] =*pData;
i++;
}
pData++;
}
//算法设计8+9/3-3*5
//先判断乘除
for(i = 0;i<strlen(szFuhao);i++)
{
if(szFuhao[i] == '*'||szFuhao[i] == '/')
{
if(szFuhao[i] =='*')
{
nData[i+1] = nData[i]*nData[i+1]; //把数据存放后一位
}else{
nData[i+1] = nData[i]/nData[i+1];
}
for(j =i;j<strlen(szFuhao);j++) //数据前移
{
nData[j] =nData[j+1];
szFuhao[j] = szFuhao[j+1];
}
}
}
for(i=0;i<strlen(szFuhao);)
{
if(szFuhao[i]=='+')
{
nData[i+1] = nData[i]+nData[i+1];
}else
{
nData[i+1] = nData[i]-nData[i+1];
}
for(j=i;j<strlen(szFuhao);j++)
{
nData[j] =nData[j+1];
szFuhao[j] = szFuhao[j+1];
}
}
printf("%d",nData[0]);
//输出测试
//for(k = 0;k<nFlag;k++)
//{
// printf("%d ",nData[k]);
//}
//for(k=0;k<strlen(szFuhao);k++)
//{
// printf("%c",szFuhao[k]);