【问题标题】:C Extract number from infix stringC 从中缀字符串中提取数字
【发布时间】:2020-10-15 12:31:30
【问题描述】:

我正在尝试从字符串/字符数组中提取运算符和操作数,但无法这样做。

我试过了:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){



char str[] = "222+333";
char *endPtr;

long int x = strtol(str,&endPtr,10);
printf("Number is %d \n" , x);


printf("Operator is %s \n" , *endPtr);

long int y = strtol(endPtr,&endPtr,10);
printf("Number is %d\n" , y);
return 0;}

不确定使用 strtol 函数后如何获取运算符。 还有什么方法可以在不使用库的情况下做到这一点?

【问题讨论】:

    标签: c


    【解决方案1】:

    您几乎已经完成了,您的代码的问题是运算符的打印。 %s 正在尝试打印一个以空字符结尾的字符串并需要一个内存地址。您正在传递一个字符+,这可能是您系统上的 ascii,因此变成内存地址 43

    我已将 printf 语句更改为打印一个字符与一个以空字符结尾的字符串,它也可以按您的预期工作

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
      char str[] = "222+333";
      char *endPtr;
    
      long int x = strtol(str, &endPtr, 10);
      printf("Number is %d \n", x);
    
      printf("Operator is %c \n", *endPtr);
    
      long int y = strtol(endPtr, &endPtr, 10);
      printf("Number is %d\n", y);
      return 0;
    }
    

    要回答评论问题,endPtr 不是指向3,而是指向+,这对于 strtol 读取即正数是有效的,当您将符号更改为除或乘时它会失败(应该与减号一起使用)

    您需要做的是将 endPtr 提前 1 个字符超过它所指向的运算符,如下面的代码所示

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
       char  str[] = "222/333";
       char *endPtr;
       char  theOperator= ' ';
    
       long int x = strtol(str, &endPtr, 10);
       printf("Number is %d \n", x);
    
       theOperator= *endPtr;
       ++endPtr;
       printf("Operator is %c \n", theOperator);
    
       long int y = strtol(endPtr, &endPtr, 10);
       printf("Number is %d\n", y);
       return 0;
    }
    

    【讨论】:

    • @pogogeh644 我已经扩展了答案以包含您的评论问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多