sscanf函数的用法.doc_第1页
sscanf函数的用法.doc_第2页
sscanf函数的用法.doc_第3页
sscanf函数的用法.doc_第4页
sscanf函数的用法.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

sscanf函数的用法 收藏 sscanf函数的用法 收藏 头文件 #include 定义函数 int sscanf (const char *str,const char * format,.); 函数说明 sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。 返回值 成功则返回参数数目,失败则返回-1,错误原因存于errno中。 返回0表示失败 否则,表示正确格式化数据的个数 例如:sscanf(str,%d%d%s, &i,&i2, &s); 如果三个变成都读入成功会返回3。 如果只读入了第一个整数到i则会返回1。证明无法从str读入第二个整数。 范例 #include main() int i; unsigned int j; char input =”10 0x1b aaaaaaaa bbbbbbbb”; char s5; sscanf(input,”%d %x %5a-z %*s %f”,&i,&j,s,s); printf(“%d %d %s ”,i,j,s); 执行 10 27 aaaaa sscanf(stringBuf.c_str(), %20#%20 ,.)语句中中的内容含义为: “% ”符号用于声明字符串,它比“%s”更具体,可以用于设置读取的样式。例如“%a-z”只读取小写字母,读到其它字符就结束。注意,方括号中如果有“”,代表一直读到某字符为止。例如: “%#”:读取字符串,一直到出现“”号为止。 “%20#”:读取20个字节的字符串,出现“”号时结束。 所以,“%20#%20 ”的意义就是, 读取两个20字节大小的字符串,第一个字符串可以用结束,第二个字符串可以用回车符结束。 它们的具体阐述,参见MSDN:“scanf Type Field Characters”章节,和“scanf Width Specification”章节。*大家都知道sscanf是一个很好用的函数,利用它可以从字符串中取出整数、浮点数和字符串等等。它的使用方法简单,特别对于整数和浮点数来说。但新手可能并不知道处理字符串时的一些高级用法,这里做个简要说明吧。1. 常见用法。以下是引用片段:charstr512=0;sscanf(123456,%s,str);printf(str=%s,str);2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。以下是引用片段:sscanf(123456,%4s,str);printf(str=%s,str);3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。以下是引用片段:sscanf(123456abcdedf,%,str);printf(str=%s,str);4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。以下是引用片段:sscanf(123456abcdedfBCDEF,%1-9a-z,str);printf(str=%s,str);5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。以下是引用片段:sscanf(123456abcdedfBCDEF,%A-Z,str);printf(str=%s,str); *名称: sscanf() - 从一个字符串中读进与指定格式相符的数据. 语法: int sscanf( string str, string fmt, mixed var1, mixed var2 . );整数 sscanf( 字符串 str, 字符串 fmt, 混合 var1, 混合 var2 . );用法: 以指定的格式 fmt 去解读字符串 str. fmt 中除了 %d 和 %s 以外, 亦可包含其他的字符串作为格式. 每一个 %d 或 %s 都对应一个参数, 按顺序为 var1, var2 . %d 读入一个整数到参数中, 而 %s 读入一个字符串. * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中) LPC 的 sscanf() 与 C 的 sscanf() 虽然相似, 但仍有不同之处. LPC 的 sscanf() 不需要 (也不可) 提供变量的内存位址给 sscanf(), 只需要给予变量的名字. 另一个不同点是, LPC 的 sscanf() 对于: sscanf( str, %s %s, str1, str2 ); 的语法, 将会把 str 中的第一个英文单字 (即第一个空白字符以前的内容) 读入 str1, 后面其余的内容读入 str2.sscanf() 会返回符合格式的 %d 和 %s 总数.以前曾经编写过这样的小程序:一个文本文件,每行是一条记录,每条记录中包含多个字段,每个字段之间以某种定界符分开,举例如下:Notebook,IBM,ThinkPad X32,6,12000(各字段以逗号分隔,内容依次是:物品名称,生产厂家,型号,数量,价格)如果要对这样的一行记录进行处理,提取出各个字段,怎么做比较好呢?我以前的做法是在一个循环中用strtok函数每次取一个字段,然后将内容保存到一个字符串数组中。这样做虽然可行,但我总感觉写出的代码有些啰嗦。最近看到一段代码,用C的标准库函数sscanf,处理这样的数据,只需一行就可以了。我把代码整理了一下,去掉了无关的部分,核心部分如下:float price;int quantity;char category21, name21;char vendor21, sku21;char buf201;fp = fopen(filename, r);fgets(buf, 200, fp);sscanf(buf,%20#%20#%f#%i#%20#%20n,name, sku, &price, &quantity, category, vendor);下面简单做些解说:%20# 最多读入20个字符,直到遇见定界符#,但不包含定界符%f# 读入一个浮点数,直到遇见定界符#%i# 读入一个整数,直到遇见定界符#%20n 最多读入20个字符,忽略行尾的回车符是不是很简洁明了呢?#include int main()char log=2002-11-11 12:12:12 4 3 3 aaaa aaaaaa;/char log=2002-11-11 12:12:12 4 3 aaaa aaaaaa;char test= 22;char log2200;char str120;char str220;char str320;char str420;char str520;char str620;char str720;int a1,a2,a3,a4,a5,a6;sscanf(log,%s %s %s %d %d %s,&a1,str2,str3,str4,&a5,&a6,str7);printf(%dn,a1);printf(%sn,str2);printf(%sn,str3);printf(%sn,str4);printf(%dn,a5);printf(%dn,a6);printf(%sn,str7);sscanf(test, %d,&a5,&a6);printf(%dn,a5);printf(%dn,a6);sscanf(log,% % % % % %$,str1,str2,str3,str4,str5,str6,str7);printf(%sn,str1);printf(%sn,str2);printf(%sn,str3);printf(%sn,str4);printf(%sn,str5);printf(%sn,str6);printf(%sn,str7);return 1;const char *str = drw-rw-rw- 1 user group 0 Oct 28 2003 -=流行音乐专用FTP=-;上面是源串,我要分别得到drw-rw-rw-,group,-=流行音乐专用FTP=-字段注意:因为这几个字段的值会变化,所以我要用格式化输入,分别存入下面的a b c中,高手帮忙!下面这个是我没成功的尝试char a20;char b50;char c20;int ret = sscanf(str, % * %u % , a, b, c);masterz() 于 2005-8-6 17:43:49sscanf可以支持regular expression?或许你要用boost,下面有一个简单的例子,虽然离你的问题还比较远/vc/boost/boost_regex_test.cppnewbiestar 于 2005-8-6 18:29:18楼主一个问题好几个地方问int ret = sscanf(str, %s%*s%*s%s%*s%*s%*s%*s%s, a, b, c);这样就可以了,不要的东西都抛弃掉了参见这个帖子里面我的回复/Expert/topic/4192/4192979.xml?temp=.2922632ding8125(丁丁) 于 2005-8-6 19:19:12可以通过字符数组输出一个字符串!今天看到一个奇怪的scanf。其实这只是用了正则表达式。sscanf(user, %127:%127 , user_name,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论