Output result string after numbers addition and subtraction

来源:互联网 发布:香港 知乎 编辑:程序博客网 时间:2024/04/28 17:43
题目描述: 
通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。

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

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

输入
 pInputStr:  输入字符串
         lInputLen:  输入字符串长度         
输出
         pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
<span style="font-size:10px;">#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXCHAR 10void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr){    int i, cnt = 0, a, b, result;    char ch[1] = {'0'};    char op1[MAXCHAR], op[MAXCHAR], op2[MAXCHAR], buffer[4];    for(i = 0; i < lInputLen; i++)        if(pInputStr[i] == ' ')            cnt++;        if(cnt != 2)                    //空格数不等于2    {        strcat(pOutputStr, ch);        return;    }            sscanf(pInputStr, "%s %s %s", op1, op, op2);    if(strlen(op) > 1 || (op[0] != '+' && op[0] != '-'))            {        strcat(pOutputStr, ch);        return;    }        for(i = 0; i < strlen(op1); i++)                                {        if(op1[i] < '0' || op1[i] > '9')        {                strcat(pOutputStr, ch);            return;        }    }                for(i = 0; i < strlen(op2); i++)                                {        if(op2[i] < '0' || op2[i] > '9')        {            strcat(pOutputStr, ch);            return;        }    }        a = atoi(op1);    b = atoi(op2);        switch(op[0])    {        case '+':            result = a + b;            itoa(result, buffer, 10);            strcat(pOutputStr, buffer);            break;        case '-':            result = a - b;            itoa(result, buffer, 10);            strcat(pOutputStr, buffer);            break;        default:            break;    }}int main(){    char pInputStr3[] = {"3 + 4"};      char pOutputStr3[MAXCHAR] = {0};    arithmetic(pInputStr3, strlen(pInputStr3), pOutputStr3);      printf(pOutputStr3);     return;}</span>

知识点
1.sscanf() - 从一个字符串中读进与指定格式相符的数据.
 函数原型:
     int sscanf( string str, string fmt, mixed var1, mixed var2 ... );
     int scanf( const char *format [,argument]... );
 说明:
     sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。
   参考:
        http://www.cnblogs.com/lyq105/archive/2009/11/28/1612677.html参考:
2.itoa() - 
   函数原形:
           char *itoa( int value, char *string,int radix);
    说明:
        value:欲转换的数据。
    string:目标字符串的地址。
       radix:转换后的进制数,可以是10进制、16进制等。
   例子:

      把一个整数转换为字符串用法itoa(i,num,10);

   i ----需要转换成字符串的数字

  num---- 转换后保存字符串的变量

  10---- 转换数字的基数(即进制)。10就是说按10进制进行转换。还可以是2,8,16等等你喜欢的进制类型

  返回值:指向num这个字符串的指针

3.atoi( )用法与iota( )正好相反

参考程序:http://blog.csdn.net/poinsettia/article/details/9569987程序:
0 0
原创粉丝点击