C语言,表达式编程……

来源:百度知道 编辑:UC知道 时间:2024/05/25 23:36:31
比如输入一个表达式“1+1*3-2”之后输入回车。我想用strtok函数把运算符号存入一个数组里,程序如下:
char s[1024];
gets(s);
char str1[1024],seps[]="0123456789",*token;
int i,h=0;
for(token=strtok(s,seps);token!=NULL;token=strtok(NULL,seps))
for(i=0;token[i]!='NULL';i++,h++)
str1[h]=token[i];
str[h]='\0';
问题出在哪里?谢谢!
为什么?不是数字字符变成’NULL'了吗?

应该是字符‘\0’吧?难道‘\0’和‘NULL’不一样吗?

再问一下,因为算式的第一个字符是‘1’,所以用strtok函数时,第一次token指向的是不是NULL啊?

token[i]!='NULL' 这句画蛇添足了, token[i] != 0就可以

划分出来的每一个tocken后面的分隔符都被写成了 0 ,也就是 NULL, 但不是 'NULL' 。。。 而且0 就写0好了, 写NULL有误导的嫌疑(因为NULL主要用于0指针)

字符'\0' 就等于0 ,

关于 NULL,这不是一个关键词,只是某个头文件里有个定义
#define NULL 0
所以每次你提到NULL就是说0(没有什么特殊性,觉得NULL可以0不可以或者NULL比0好都没任何理由)。可惜又有规则说,字符串里的宏是不扩展的。。。
于是'NULL'是啥呢, 相当于一个整数: ('N'<<24) + ('U'<<16) + ('L'<<8) + 'L' = 反正一个很大的整数。。。

关于这个msdn上是这么说的: Returns a pointer to the next token found in strToken. They return NULL when no more tokens are found. Each call modifies strToken by substituting a NULL character for each delimiter that is encountered.
可见不会return NULL。 这个函数的行为是围绕token的,而不是围绕delimiter的,所以不能理解成遇到delimiter就怎么样,而是遇到token才返回