【发布时间】:2016-07-30 14:32:26
【问题描述】:
我有这个
A > B,或A < B,或A==B,
使用strtok 我将销毁数据,我的目标是获得某种可以检查的结构:
- 我有什么样的分隔符
- 访问它的两侧(A 和 B)。
所以:
if ( > )
do something with A and B
else if (==)
do something with A and B
我知道这听起来很简单,但它总是很麻烦。
编辑:
我所做的是这个,对于这项任务来说似乎太长了:
for (int k=1;k<strlen(p);k++)
{
char left[4]="" ;
char right[12]="" ;
switch(p[k])
{
case '>' :
{
long num =strstr(p,">") - p ;
strncpy(left,p,num);
strncpy(right,p+num+1,strlen(p)-num-1);
break;
}
case '<' :
{
long num =strstr(p,"<") - p ;
strncpy(left,p,num);
strncpy(right,p+num+1,strlen(p)-num-1);
break;
}
case '=' :
{
long num =strstr(p,"=") - p ;
strncpy(left,p,num);
strncpy(right,p+num+1,strlen(p)-num-1);
break;
}
case '!' :
{
long num =strstr(p,"!") - p ;
strncpy(left,p,num);
strncpy(right,p+num+1,strlen(p)-num-1);
break;
}
default :
{}
}
}
【问题讨论】:
-
@mik1904 它不适用于“==”,它不是单个字符。
-
由于可能有也可能没有空格分隔符(或者看起来如此),仅仅 指针 是不够的。您需要一个
result结构,其中至少包含一个指向每个标记的开头及其长度的指针,或者,将每个标记复制到一个新字符串中。代码可以非常简单;到目前为止你有什么? -
这是来自文档项目的
strcspn示例:stackoverflow.com/documentation/c/1990/strings/10906/… -
@MarkPlotnick 我想到了
strpbrk(),所有的解决方案都有问题,==。 -
编写将字符串拆分为标记的 C 代码总是有些麻烦。如果这是一项作业并且您只需要使用 C,那么这是不可避免的。但是解析算术表达式是很多程序都会做的事情,他们经常使用
lex或flex和yacc或bison来生成C代码。这是一个页面,展示了它的简单程度:www-h.eng.cam.ac.uk/help/tpl/languages/flexbison
标签: c