2014华为机试题---表达式计算

来源:互联网 发布:金字塔股票交易软件 编辑:程序博客网 时间:2024/06/14 05:35
三、题目描述(50分): 
通过键盘输入100以内正整数的加、减运算式,
请编写一个程序输出运算结果字符串。
输入字符串的格式为:“操作数1 运算符 操作数2”,
“操作数”与“运算符”之间以一个空格隔开。


补充说明:
1、操作数为正整数,不需要考虑计算结果溢出的情况。
2、若输入算式格式错误,输出结果为“0”。


要求实现函数: 
void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);


【输入】 pInputStr:  输入字符串
            lInputLen:  输入字符串长度         
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长; 


【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出

*/

#include <stdio.h>#include<iostream>using namespace std;#include<string.h>#include<stdlib.h>void arithmetic(const char *input, long len, char *output){char s1[10];char s2[10];char s3[10];//表达式数据分别存储int cnt=0;int len_input=strlen(input);for(int i=0;i<len_input;++i){if(input[i]==' ')cnt++;}if(cnt!=2){*output++ = '0';*output = '\0';return;}sscanf(input,"%s %s %s",s1,s2,s3);//从一个字符串中读进与指定格式相符的数据if(strlen(s2)!=1||(s2[0]!='+'&&s2[0]!='-')){*output++ = '0';*output = '\0';return;}    int i;int len_s1=strlen(s1);for(i=0;i<len_s1;i++){if(s1[i]<'0'||s1[i]>'9'){*output++ = '0'; *output = '\0';return;}}int len_s3=strlen(s3);for(i=0;i<len_s3;i++){if(s3[i]<'0'||s3[i]>'9'){*output++ = '0'; *output = '\0';return;}}int x = atoi(s1);//将字符串转换成整数 ASCII to integer;int y = atoi(s3);if(s2[0]=='+'){int result = x+y;itoa(result,output,10);//将整数转换成字符串}else if(s2[0]=='-'){int result = x-y;itoa(result,output,10);}else{*output++ = '0'; *output = '\0';return;}}void main(){char str[10];//str=(char *)malloc(sizeof(char));//scanf("%s",str);cin.getline(str,10);//输入字符串流  包括空格char outstr[10];int len = strlen(str);arithmetic(str,len,outstr);printf("%s\n",str);printf("%s\n",outstr);}


0 0
原创粉丝点击