1. 首页 > 科技

C语言使用sscanf() 过滤字符串使用正则表达式的问题?(c语言编程,关于sscanf通过中文逗号截取字符串的问题)

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