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

【2014】字符串(3)

时间:2014-06-12 06:31:17      阅读:246      评论:0      收藏:0      [点我收藏+]

标签: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” 注:格式错误

 

bubuko.com,布布扣
#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中

}
bubuko.com,布布扣

复习下面这道题:

bubuko.com,布布扣
//(1)
char *strA()
{
   char str[] = "hello,world"‘;
  return str;
}

//(2)
const char *strA()
{
  char *str = "hello,world";
  return str;
}
bubuko.com,布布扣

(1)是错误的,(2)是正确的,因为 char c[] ="hello,world";是分配一个局部数组(局部数组存放在函数的栈帧)

                                                  char *c = ="hello,world";是分配一个全局数组。(全局数据存放在全局区域)

 

 

 

 

【2014】字符串(3),布布扣,bubuko.com

【2014】字符串(3)

标签:style   class   blog   code   java   http   

原文地址:http://www.cnblogs.com/Xylophone/p/3782461.html

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