作者silent2579 (囧rz)
看板C_and_CPP
标题[问题]有关解析一个计算式字串
时间Fri Aug 7 12:02:39 2009
这个作业是希望我们能够解析如下的这个字串
char *str="((0.12 +.734)* abc/(3.78-21*v1)-123/v2^2)* 24.34 -1234";
将其分解为数字 变数名称 左右括弧和运算符号(+-*/)
并以数字,字串及字元的格式列印出来
EX: number 0.12
operator +
right parenthsis (
希望印出来大概能像上面的那种格式
这是小弟自己写的程式
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(void)
{
char c ;
char *expr="str";
char inp[128];
int n;
double f;
char *str="((0.12 +.734)* abc/(3.78-21*v1)-123/v2^2)* 24.34 -1234";
printf("Analyse string\"%s\"\n",str);
while (c= *expr)
{
if(isalpha(c))
{
sscanf(expr,"[a-Z-A-Z 0.9]%n",inp,&n);
printf("Variable\t\t\t%s\n",inp);
expr+=n;
continue;
}
if (isdigit(c))
{
sscanf(expr,"%f%n",&f,&n);
printf("Number\t\t\t%f\n",f);
expr+=n;
continue;
}
}
switch(c)
{ case ' ':
case '\t':
case '\v':
case '\n':
case '\f':
break;
case '(':
printf("left parenthesis\t%c\n",c);
break;
case ')':
printf("right parenthesis\t\t%c\n",c);
break;
case '+':
case '-':
case '*':
case '/':
case '^':
printf("operator\t\t%c,n",c);
break;
}
expr++;
system("pause");
}
但每次下去跑的时候都会出现错误
而且都只是把我要印的那行字串列印出来後devc++会当掉
没有办法印出我希望的格式
可以请大家帮我看看是否有哪里写错需要修正吗
非常感谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.169.97.193
1F:→ MOONRAKER:为什麽你要处理的expression放在str里面 08/07 15:01
2F:→ MOONRAKER:後面回圈却在读expr?又没有在哪里把str复制到expr 08/07 15:01
3F:→ silent2579:如果改成while(c= *str)就不会当掉了,可是还是无法跑出 08/07 15:53
4F:→ silent2579:我要的格式,有人可以帮我看看是哪出问题吗??感谢 08/07 15:54
5F:→ MOONRAKER:不要,我认为你逻辑上有很大问题 08/07 17:57
6F:→ MOONRAKER:除非你好好解释为什麽一开始要读expr,我非常在意 08/07 17:58
7F:→ silent2579:不好意思 一开始是我对用法还不太清楚才会读成expr 08/07 18:14