Output result string after numbers addition and subtraction

题目描述: 
通过键盘输入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 10

void 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值