C语言使用sscanf() 过滤字符串使用正则表达式的问题?(c语言编程,关于sscanf通过中文逗号截取字符串的问题)
c语言编程,关于sscanf通过中文逗号截取字符串的问题
首先我要大言不惭说一句 在C/C++版块 折腾文件 字符串 我也是前十名的人物
然后我反驳一下 楼上 sscanf是可以用正则表达式的
接下来 我回答楼主
%[^,] 这样的结构 ^后面的是单字符
而不是中文的 逗号 是双字节的
在C里算是 字符串
因此不能用在这里
c语言,sscanf的用法问题,急!
从你的sscanf语句来看,每个字段的数据都应该是有长度限定的,那么当你的数据为空时,就必须有占位符才行,例如空格等。
sscanf再使用[ ]作为格式化占位符的时候,原文定义的第一句话是这么写的:
[ Matches a nonempty sequence of characters from the specified set of accepted characters
其中的nonempty sequence意思就是,不为空的序列,因此,sscanf在这里就无法满足你的需求。
正常情况下,对于此种情况,我们一般会采用特殊符号加空格的形式对数据进行分隔,而你的数据源又是来自于csv文件,所以我建议你首先对数据进行格式化,然后再进行解析,首先保障了数据的合法有效性以后,再解析就不会有问题了
c语言中使用sscanf函数读读空数据的问题
别费脑筋了,另想办法吧!两个逗号间本无数据,你怎么能叫sscanf读出个“空”来——这真叫“无中生有”!给你个思路:写个函数一个数据一个数据读,当遇到两个或多个连续逗号时在两个逗号间给接收变量附加一个“空”。
如何在C语言中巧用正则表达式
sscanf
取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
sscanf("123456abcdedfBCDEF","%[1-9a-z]",buf);
printf("%s\n",buf);
给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中
sscanf("iios/12DDWDFF@122","%*[^/]/%[^@]",buf);
printf("%s\n",buf);
结果为:123456abcdedf
http://baike.baidu/link?url=ZO-DAritgCoX9mmRA-MEMaL7Az1mG1ywp5PrOuT4BJuCgjFMdNgdFtAsK2-1WbzOKbzEn-5T4MhgljTpSCt-Fq