C:将数学表达式字符串转换为int,结果为

时间:2016-01-28 10:43:26

标签: c

我遇到程序问题:任务是写下一个函数,给定一个只包含数字和+-符号的字符串;返回int值中表达式的结果。

我的意思是,如果输入char="2+1+3",结果应为int=6。 我想过用strtok将它分成标记,然后将它们转换成数字;

有没有人有某种建议? 我是一年级学生,所以我不习惯复杂化,而且我只能使用标准库。 谢谢大家。

int string_expression(char s1[]){
  int i;
  char*pch;
  char* frase_dup=strdup(s1);
  int count=0;
  char**dupl;
  long int pcf;
  pch=strtok(frase_dup,"+");
  pcf=strtol(const char *pch, char **dubl, int 10);

  for(i=0; i<strlen(s1); i++) {
    if(s[i]=="-")  count=count+pcf[i+1]*-1;
    if(s[i]!=NULL) count=count+pcf[i];
  }
  return count;
}

当然这段代码都错了,但正如我所说,我是一个新手:(

3 个答案:

答案 0 :(得分:2)

由于只有加法和减法(不包括空格)
它可以只是通过使用strtol每个数值作为数字序列来转换为字符串。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int string_expression(char s1[]){
//only numbers and + or - symbols
    char *endp = s1;
    int sum = 0;
    while(*s1){
        sum += strtol(s1, &endp, 10);
        s1 = endp;
    }
    return sum;
}

int main(void){
    printf("result = %d\n", string_expression("2-1+3"));
    return 0;
}

答案 1 :(得分:0)

用户strtol来解析下一个号码。然后检查下一个操作。冲洗并重复。以下是如何在伪代码中执行此操作:

  1. 操作'+'累加器←0, ptr ←文本开头
  2. summand strtol ptr ,&amp; ptr ,10)
  3. 如果 操作'+' 累积器累积器 + summand
    其他 如果 操作'-' 然后 累积器累加器 - summand
    其他表达式格式不正确。
  4. 操作←* ptr ptr ptr + 1
  5. 如果 操作'\0' 然后 返回 累积器
  6. 转到第2步

答案 2 :(得分:0)

您稍后需要编写一些parser(可能在词法标记器或lexer之前)。这是一个非常经典的练习。 您可以手动编写一些recursive descent parser或使用一些解析器生成器工具(a.k.a compiler-compiler,不知何故错误,因为编译器不仅仅是解析)。 GNU bison工具以您的文档为例进行练习。

在评估它之前,您可能希望(至少为了好玩)在内存中显式构造abstract syntax tree

所以你可以&#34;窃取&#34;很容易在网上找到一些代码,但你自己会学习更多。学习编程需要花费大量时间(也许ten years)。