如何将此程序各个模块改写为函数用主函数调用,求改后的代码
#include <stdio.h>#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void inputstr(char *p_str);
int main()
{
//从键盘获取表达式字符串
char string[256]={0}; //存放键盘获得的表达式字符串
int num[256]={0};
char str_num[256]={0};
char str[256]={0}; //用于存放运算符的字符数组
int i=0,k,j;
char *pstr=string;
//从键盘中获取字符串表达式
inputstr(string);
printf("%s\n",string);
//提取字符串表达式中的数字
pstr=string;
j=0;
k=0;
for(i=0;i<=strlen(string);i++)
{ //"888+333*777"
if (isalnum(*pstr))
{
str_num[j]=*pstr;
j++;
}else
{
str_num[j]='\0';
num[k]=atoi(str_num);
k++;
j=0; //下标归零
}
pstr++;//指向sc数的下一字符
}
//测试一下n[222]
for (i=0;i<5;i++)
{
printf("%d,",num[i]);
}
printf("\n");
//提取字符串表达式中的运算符
pstr=string;
k=0;
for(i=0;i<=strlen(string);i++)
{
if(isalnum(*pstr))
{
//continue;
}else{
str[k]=*pstr;
k++;
}
pstr++;
}
//测试
for (i=0;i<strlen(str);i++)
{
printf("%c,",str[i]);
}
//计算乘除功能
while(1)
{
for(i=0;i<=strlen(str);i++)
{
if(str[i]=='*'||str[i]=='/')
{
if(str[i]=='*')
{
num[i+1]=num[i]*num[i+1];
}else{
num[i+1]=num[i]/num[i+1];
}
//将数组num中的数向前移动一位
//printf("%d",strlen(str));
for(j=i;j<=strlen(str)+1;j++)
{
num[j]=num[j+1];
str[j]=str[j+1];
}
}
}
//打印出当前一步计算结果的表达式
//printf("%d\n",strlen(str));
for (i=0;i<=strlen(str);i++)
{
printf("%d%c",num[i],str[i]);
}
//退出条件
j=1;
for(i=0;i<=strlen(str);i++)
{
if(str[i]=='*'||str[i]=='/')
{
j=0;
}
}
if(j)
{
break;
}
}
//加减功能
while(1)
{
for(i=0;i<=strlen(str);i++)
{
if(str[i]=='+'||str[i]=='-')
{
if(str[i]=='+')
{
num[i+1]=num[i]+num[i+1];
}else{
num[i+1]=num[i]-num[i+1];
}
//将数组num中的数向前移动一位
for(j=i;j<=strlen(str)+1;j++)
{
num[j]=num[j+1];
str[j]=str[j+1];
}
}
}
//打印出当前一步计算结果的表达式
for (i=0;i<=strlen(str);i++)
{
printf("%d%c",num[i],str[i]);
}
//退出条件
j=1;
for(i=0;i<=strlen(str);i++)
{
if(str[i]=='+'||str[i]=='-')
{
j=0;
}
}
if(j)
{
break;
}
}
getchar();
return 0;
}
void inputstr(char *p_str)
{
while(1)
{
*p_str=getchar();
if(*p_str=='\n')
{
break;
}
p_str++;
}
}