您的位置:程序门 -> c/c++ -> c++ 语言



急求:复杂字符串的解析!!


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


急求:复杂字符串的解析!![已结贴,结贴人:wzgolfman]
发表于:2007-08-16 09:18:43 楼主

有如下格式的字符串:
一个数字n,一个长度为n的名字字符串(没有逗号),一个数字m,一个m个字符的地址(没有逗号),一个数字k,k个字符的电话(全是数字),不定长度的介绍(可能含有逗号),一个id(全是数字)
各位大侠帮忙啊!!!!!
发表于:2007-08-16 09:19:501楼 得分:0
sscanf(str, "%d,%s,%d,%s,%d,%s,%d,%s,%d ",n,name,m,address,k,tel,intro,id);
发表于:2007-08-16 09:20:102楼 得分:0
错了,可能含有逗号啊,这个麻烦了
发表于:2007-08-16 09:20:273楼 得分:0
楼上,你不用上班啊
发表于:2007-08-16 09:21:094楼 得分:0
可以用正则试试看
发表于:2007-08-16 09:21:475楼 得分:100
试试这个:
sscanf(str, "%d,%s,%d,%s,%d,%s, "n,name,m,address,k,tel);//前面没有问题
p2=strrchr(str, ', ');//找到最后一个,就是不定长的结束
strcpy(id,p2+1);//获取后面的id
//找到第六个逗号
p1   =   strchr(str, ', ');//找到第一个
for   (int   i   =0;i <5;++i)//后面5个
  p1   =   strchr(p1+1, ', ');//跳过一个 ', '才能继续查找
++p1;//跳到不定长开始
strncpy(intro,p1,p2-p1);

但是要求模式串和正文严格匹配否则会出很多错误
发表于:2007-08-16 09:22:156楼 得分:0
to:   星羽
嘿嘿~~
发表于:2007-08-16 09:22:337楼 得分:0
不定长度的介绍(可能含有逗号),一个id(全是数字)


--------

这个没办法分开啊,怎么知道不定长什么时候结束,如果不定长最后有数字呢
发表于:2007-08-16 09:23:308楼 得分:0
确定开始那个,和结束那个就可以了
“但是要求模式串和正文严格匹配否则会出很多错误”!!!!!
发表于:2007-08-16 09:25:499楼 得分:0
如果

不定长度的介绍(可能含有逗号),是

afasdf   a1312312343412,13213

一个id(全是数字)

是1312312323

怎么分
发表于:2007-08-16 09:28:2910楼 得分:0
最后一个逗号后面都是id前面都是不定长
发表于:2007-08-16 09:30:4111楼 得分:0
还是用正则表达式吧。
发表于:2007-08-16 09:31:3712楼 得分:0
就像...不定长参数表,要求确定最后一个确定的参数,一样,这里确定最后一个确定参数(就是全是数字的电话后面那个,然后确定下边界,就是从后面读起的第一个都好,这样通过两个确定严格格式来确定一个不严格格式
但是模式匹配中说过,最好内容符号和结束(分割)符号交集是空,否则匹配可能产生二义~
发表于:2007-08-16 09:34:4313楼 得分:0

主要是   lz   这些都没说
发表于:2007-08-16 09:37:4714楼 得分:0
格式已经很明确了
发表于:2007-08-16 09:38:2015楼 得分:0
星羽去看看模式匹配吧
发表于:2007-08-16 09:39:1216楼 得分:0
ls

最后一个逗号后面都是id前面都是不定长


这个是你说的
发表于:2007-08-16 09:40:0417楼 得分:0

如果楼主可以重新定义文件格式,那会简单很多
发表于:2007-08-16 09:46:2218楼 得分:0


我疑问就是   id   是否固定长,不定长数据是否有结束符?

这两个楼主都没说清,不想猜想
发表于:2007-08-16 09:49:3919楼 得分:0
id无所谓定不定长,只要知道id里面没有逗号分割符号,而前面那个段域结束后就开始id,就是由id前面那个逗号来确定不定长部分的结束~
发表于:2007-08-16 09:50:0020楼 得分:0
估计lz说这就是那么一项,后面没有了~
发表于:2007-08-16 09:51:2121楼 得分:0
kenmark(fenix)  

你说的我一直很清楚

但我是说

不定长数据是否有结束符(比如你说的   逗号)

这个是我问楼主的
发表于:2007-08-16 09:52:3322楼 得分:0
不定长度的介绍(可能含有逗号),

那就有可能是

asdfa131231312

也可能是

afsadf,13123,adfasf,13123(后面紧跟id)
发表于:2007-08-16 09:53:4823楼 得分:0
id前面一定要一个逗号分割,格式不是很明确吗?即使:
afdgfbj,dg,ge,,1122
                            这里才开始id
发表于:2007-08-16 09:54:1324楼 得分:0
lz迟迟不出现,哎,哎,哎~~
发表于:2007-08-16 09:56:1825楼 得分:0
kenmark(fenix)   (   )   信誉:100     2007-08-16   09:53:48     得分:   0    
 
 
      id前面一定要一个逗号分割,格式不是很明确吗?即使:
afdgfbj,dg,ge,,1122
                            这里才开始id
   
 


-------


楼主就是没这么说,所以我才问

楼主说的   可能有逗号,要是没有逗号呢


kenmark(fenix)  

你是在猜楼主的格式了,不过也只有这样才能分开


我们还是不争论了,等楼猪献身
发表于:2007-08-16 10:11:0626楼 得分:0
每个字段的结束符是什么?
如果没有结束符和明确的位数限制,该题无解
比如:(略)不定长度的介绍(可能含有逗号),一个id(全是数字)
      介绍的内容是:abc123
      id是:456
      组成的字符串是:(略)abc123456
不用程序,你眼睛看,从组成的字符串,你能分析出123456到底怎么断开吗?不能!!

所以把题目研究清楚了再来。

发表于:2007-08-16 10:13:3927楼 得分:0
如果说你上面的‘,'就是每个字段的结束符,你没清除的说明。
那简单的字符串分析就可以了。
从头到尾巴,以‘,'   断开,   最后一个反方向断开,剩下的内容认为是介绍
发表于:2007-08-16 10:16:0828楼 得分:0
不好意思现在才回来,看了看,kenmark(fenix)正解就是这个意思,可能我的格式没有说清楚吧
最后的id前面一定要一个,和不定长内容分开
发表于:2007-08-16 10:18:1929楼 得分:0
谢谢kenmark(fenix)兄弟的代码,可以使用了,结贴!
发表于:2007-08-16 10:37:2930楼 得分:0
果然我的理解是正确的
发表于:2007-08-16 12:07:5931楼 得分:0
厉害,mark
发表于:2007-08-17 20:13:0232楼 得分:0
kenmark(fenix)真是楼主肚里面的蛔虫啊.
不然谁从题目里面读懂了 "不定长度的介绍(可能含有逗号),一个id(全是数字) "这里分割是用 ", "分割?而且还是大写的,这个都读懂了,哈哈哈哈   ,不得不佩服。
发表于:2007-08-20 09:05:1033楼 得分:0
收来看看
发表于:2007-08-20 09:06:5234楼 得分:0
以前玩过一段时间的模式匹配,所以看格式有一点经验~


快速检索

最新资讯
热门点击