标签:style class blog code java http
题目描述(50分):
通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。 输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。
补充说明:
1、操作数为正整数,不需要考虑计算结果溢出的情况。
2、若输入算式格式错误,输出结果为“0”。
要求实现函数:
void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“4 + 7” 输出:“11”
输入:“4 - 7” 输出:“-3”
输入:“9 ++ 7” 输出:“0” 注:格式错误
#define MAXCHAR 256 void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr); int main(void) { char pInputStr3[] = {"3 + 4"}; char pOutputStr3[MAXCHAR] = {0}; arithmetic(pInputStr3 , strlen(pInputStr3),pOutputStr3); puts(pOutputStr3); return 0; } void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr) { long i,locOfSpace; int flag; long numOfSpace=0; if(pInputStr[0]==‘ ‘|| pInputStr[lInputLen-1]==‘ ‘) //输入串的开头结尾有空格非法 { pOutputStr[0]=‘0‘ ; pOutputStr[0]=‘\0‘; return; } for(i=0;i<lInputLen;i++) //中间空格非法,例如"连着出现++"的情况 { if(pInputStr[i]==‘ ‘) { locOfSpace = i;//输入合法则最终记录的肯定是第二个空格的位置 numOfSpace++; if(numOfSpace == 1) flag = 1;//flag = 1标记遇到的第一个空格; else flag = 0; if(flag == 1 && pInputStr[i+2] !=‘ ‘) //判断条件要写全 { pOutputStr[0]=‘0‘ ;//如果直接写pOutputStr=“0”,为什么非法时什么都不输出呢,不是应该输出0吗? pOutputStr[0]=‘\0‘; //因为这样是把指针pOutputStr的值本身改变了,让pOutputStr指向了全局的字面值常量区, //但作为形参pOutputStr不能回传给实参,所以要从本质上改变pOutputStr本身指向的区域。 return; } } } if(numOfSpace != 2) //空格数不等于2非法 { pOutputStr[0]=‘0‘ ; pOutputStr[0]=‘\0‘; return; } char operat = pInputStr[locOfSpace-1]; char pnum1[256]={0},pnum2[256]={0};//给pnum1和pnum2不要声明成指针,因为要new进行初始化。声明为数组要指定数组大小。 long j = 0,k=0; for(i=0;i<locOfSpace-2;i++)//第一个操作数存放到pnum1中 pnum1[j++]=pInputStr[i]; pnum1[j]=‘\0‘; for(i=locOfSpace+1;i<=lInputLen;i++)//第一个操作数存放到pnum2中 pnum2[k++]=pInputStr[i]; long num1,num2,result; num1 = atoi(pnum1);//atoi的参数直接是char*,如果参数是string则参数还得写成s.c_str() num2 = atoi(pnum2); if(operat == ‘+‘) result = num1+num2; else if(operat == ‘-‘) result = num1-num2; else { pOutputStr[0]=‘0‘ ; pOutputStr[0]=‘\0‘; return; } pOutputStr=itoa(result,pOutputStr,10);//result转换后存储到pOutputStr中 }
复习下面这道题:
//(1) char *strA() { char str[] = "hello,world"‘; return str; } //(2) const char *strA() { char *str = "hello,world"; return str; }
(1)是错误的,(2)是正确的,因为 char c[] ="hello,world";是分配一个局部数组(局部数组存放在函数的栈帧)
char *c = ="hello,world";是分配一个全局数组。(全局数据存放在全局区域)
标签:style class blog code java http
原文地址:http://www.cnblogs.com/Xylophone/p/3782461.html