码迷,mamicode.com
首页 > 其他好文 > 详细

Output result string after numbers addition and subtraction

时间:2015-01-07 23:39:44      阅读:374      评论:0      收藏:0      [点我收藏+]

标签:c   华为机试   

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

Output result string after numbers addition and subtraction

标签:c   华为机试   

原文地址:http://blog.csdn.net/xinyu913/article/details/42499983

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!