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是没有正则表达式这种东西的。 展开
展开全部
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。
更多追问追答
追问
谢谢你的回答,你给出的例子百度出来很多,基本都一样,但例子实在太简单了。我的问题比那复杂多了……
追答
那 就 说的详细 一点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询