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是没有正则表达式这种东西的。
展开
 我来答
鲁步友卉2k
2013-10-28 · TA获得超过149个赞
知道小有建树答主
回答量:100
采纳率:0%
帮助的人:72.1万
展开全部
strtok = find token in string.
它被设计用于词法分析的前期,token分离的阶段。
你的需求需要一点简单的语法结构的嵌入,所以不适合使用这个函数。
你有几个选择:
1、编写你自己的语法(DSL)解释器。
2、使用某个支持正则表达式匹配的函数库。
3、仅处理这种特别的字符串,就这么机械地匹配吧。
从表述上看,各方案的优劣你也是很容易想清楚的,这里就不详细说了。
herox_hu
2013-10-21 · TA获得超过776个赞
知道小有建树答主
回答量:1122
采纳率:0%
帮助的人:321万
展开全部
  1. strtok介绍
    众所周知,strtok可以根据用户所提供的分割符(同时分隔符也可以为复数比如“,。”)
    将一段字符串分割直到遇到"/0".

  2. 下面给出你一个例子,详细说明一下,应该会更直白的了解:
    比如,分隔符=“,” 字符串=“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。

更多追问追答
追问
谢谢你的回答,你给出的例子百度出来很多,基本都一样,但例子实在太简单了。我的问题比那复杂多了……
追答
那 就 说的详细 一点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式