
C\C++ strtok()函数的使用及字符串处理
现在我要将GetFileAttributesExA:ARGS(E:\aa.txt,0,0012FE78),ENTRY[0x7c813851],RET[0x4126e1],...
现在我要将GetFileAttributesExA: ARGS (E:\aa.txt,0,0012FE78), ENTRY [0x7c813851], RET [0x4126e1],切分出GetFileAttributesExA和ARGS (E:\aa.txt,0,0012FE78)中的括号里面的东西,我用strtok()函数怎么做?或者还有什么别的方法可以做呢?我不熟悉字符串的处理,请教大家帮帮忙,谢谢!
将str="GetFileAttributesExA: ARGS (E:\aa.txt,0,0012FE78), ENTRY [0x7c813851], RET [0x4126e1]",切分出GetFileAttributesExA和ARGS (E:\aa.txt,0,0012FE78)中的括号里面的E:\aa.txt,0,0012FE78。
当然我现在可以这么做:
char *r=strstr(str,":");
char *p=strtok(str,":");
//r指向“ARGS (E:\aa.txt,0,0012FE78), ENTRY [0x7c813851], RET [0x4126e1]",
//p指向"GetFileAttributesExA"
char *q=strtok(r,"()");
q=strtok(NULL,"()");//这时候q指向"E:\aa.txt,0,0012FE78"
这样做也是可以完成的,只是我觉得这样做太机械了,而且对字符串的结构依赖性太大了。有没有像类似正则表达式那样的,取出括号里面的字符串。不过我也查过了,貌似标准C是没有正则表达式这种东西的。 展开
将str="GetFileAttributesExA: ARGS (E:\aa.txt,0,0012FE78), ENTRY [0x7c813851], RET [0x4126e1]",切分出GetFileAttributesExA和ARGS (E:\aa.txt,0,0012FE78)中的括号里面的E:\aa.txt,0,0012FE78。
当然我现在可以这么做:
char *r=strstr(str,":");
char *p=strtok(str,":");
//r指向“ARGS (E:\aa.txt,0,0012FE78), ENTRY [0x7c813851], RET [0x4126e1]",
//p指向"GetFileAttributesExA"
char *q=strtok(r,"()");
q=strtok(NULL,"()");//这时候q指向"E:\aa.txt,0,0012FE78"
这样做也是可以完成的,只是我觉得这样做太机械了,而且对字符串的结构依赖性太大了。有没有像类似正则表达式那样的,取出括号里面的字符串。不过我也查过了,貌似标准C是没有正则表达式这种东西的。 展开
2个回答
展开全部
strtok = find token in string.
它被设计用于词法分析的前期,token分离的阶段。
你的需求需要一点简单的语法结构的嵌入,所以不适合使用这个函数。
你有几个选择:
1、编写你自己的语法(DSL)解释器。
2、使用某个支持正则表达式匹配的函数库。
3、仅处理这种特别的字符串,就这么机械地匹配吧。
从表述上看,各方案的优劣你也是很容易想清楚的,这里就不详细说了。
它被设计用于词法分析的前期,token分离的阶段。
你的需求需要一点简单的语法结构的嵌入,所以不适合使用这个函数。
你有几个选择:
1、编写你自己的语法(DSL)解释器。
2、使用某个支持正则表达式匹配的函数库。
3、仅处理这种特别的字符串,就这么机械地匹配吧。
从表述上看,各方案的优劣你也是很容易想清楚的,这里就不详细说了。
展开全部
strtok介绍
众所周知,strtok可以根据用户所提供的分割符(同时分隔符也可以为复数比如“,。”)
将一段字符串分割直到遇到"/0".下面给出你一个例子,详细说明一下,应该会更直白的了解:
比如,分隔符=“,” 字符串=“Fred,John,Ann”
通过strtok 就可以把3个字符串 “Fred” “John” “Ann”提取出来。
上面的C代码为
QUOTE:
int in=0;
char buffer[]="Fred,John,Ann"
char *p[3];
char *buf = buffer;
while((p[in]=strtok(buf,","))!=NULL) {
in++;
buf=NULL; }
如上代码,第一次执行strtok需要以目标字符串的地址为第一参数(buf=buffer),之后strtok需要以NULL为第一参数
(buf=NULL)。指针列p[],则储存了分割后的结果,p[0]="John",p[1]="John",p[2]="Ann",而buf就变
成 Fred/0John/0Ann/0。
更多追问追答
追问
谢谢你的回答,你给出的例子百度出来很多,基本都一样,但例子实在太简单了。我的问题比那复杂多了……
追答
那 就 说的详细 一点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询