我遇到程序问题:任务是写下一个函数,给定一个只包含数字和+
或-
符号的字符串;返回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;
}
当然这段代码都错了,但正如我所说,我是一个新手:(
答案 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
来解析下一个号码。然后检查下一个操作。冲洗并重复。以下是如何在伪代码中执行此操作:
'+'
,累加器←0, ptr ←文本开头'+'
则 累积器←累积器 + summand '-'
然后 累积器←累加器 - summand '\0'
然后 返回 累积器。 答案 2 :(得分:0)
您稍后需要编写一些parser(可能在词法标记器或lexer之前)。这是一个非常经典的练习。 您可以手动编写一些recursive descent parser或使用一些解析器生成器工具(a.k.a compiler-compiler,不知何故错误,因为编译器不仅仅是解析)。 GNU bison工具以您的文档为例进行练习。
在评估它之前,您可能希望(至少为了好玩)在内存中显式构造abstract syntax tree。
所以你可以&#34;窃取&#34;很容易在网上找到一些代码,但你自己会学习更多。学习编程需要花费大量时间(也许ten years)。