#include<iostream>
using namespace std;
void arithmetic(const char *input,long len,char *output)
{
char p1[10];
char p2[10];
char p3[10];
int cnt = 0;
int i = 0;
for(;i<len;i++)
{
if(input[i] == ' ')
cnt++;
}
//空格的数目为2,保证算术格式正确,若输入算式格式错误,输出结果为0
if(cnt!= 2)
{
*output = '0';
output++;
*output = '\0';
return ;
}
//将字符串分开
int j = 0;
int k = 0;
//初始化第一个字符串
for(i = 0,j= 0;i<len;i++)
{
if(input[i] != ' ')
{
p1[j++] = input[i];
}
else
{
p1[j] = '\0';
break;
}
}
//初始化第2个字符串
for(j=0,i++;i<len;i++)
{
if(input[i] != ' ')
{
p2[j++] = input[i];
}
else
{
p2[j] = '\0';
break;
}
}
//初始化第3个字符串
for(j=0,i++;i<len;i++)
{
if(input[i] != ' ')
{
p3[j++] = input[i];
}
}
p3[j] = '\0';
//sscanf(input,"%s %s %s",p1,p2,p3);
//保证中间运算法正确
if(strlen(p2)!= 1 || (p2[0]!='+'&&p2[0] != '-'))
{
*output = '0';
output++;
*output = '\0';
return ;
}
//保证第一个字符串是数字
int len_p1 = strlen(p1);
for(i = 0;i<len_p1;i++)
{
if(p1[i]<'0'||p1[i]>'9')
{
*output = '0';
output++;
*output = '\0';
return ;
}
}
//保证第3个字符串是数字
int len_p3 = strlen(p3);
for(i = 0;i<len_p3;i++)
{
if(p3[i]<'0'||p3[i]>'9')
{
*output = '0';
output++;
*output = '\0';
return ;
}
}
//计算过程
int x = atoi(p1);
int y = atoi(p3);
if(p2[0] == '+')
{
int result = x+y;
itoa(result,output,10);
}
else if(p2[0] == '-')
{
int result = x-y;
itoa(result,output,10);
}
}
int main()
{
char str[] = {"10 + 23"};
char outstr[10]={'\0'};
int len = strlen(str);
arithmetic(str,len,outstr);
cout<<str<<endl;
cout<<outstr<<endl;
system("pause");
return 0;
}
华为机试之计算字符串运算结果
最新推荐文章于 2022-06-09 23:04:25 发布