前言
今天在家里做acm的时候,用到了sscanf()函数,感觉特别犀利,这里记录一下用法。
sscanf()
函数原型
int sscanf(const char *str, const char *format, mixed var1, mixed var2);
说明:sscanf()会将参数str的字符串根据参数format来转换并格式化数据。
format格式
{%[*] [width][{h | l | l64 | L}]type | ' ' | t' | '\n' | 非%符号}
注:
- *可用于格式中,(即%*d和%*s)加了星号(*)表示跳过此数据不读入。(也就是不把数据读入到参数中)
- width表示读取宽度
- {h | l | l64 | L}:参数size,通常h表示单字节size,l表示2字节size,L表示4字节size,l64表示8字节size
- type参数类型,例如%s,%d
- 支持正则表达式,例如%[a-z]匹配a到z中任意字符(ps:正则表达式这个假期我会写一篇博客记录)
参考用例
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int result;
char str[100];
char buf1[255], buf2[255], buf3[255], buf4[255];
//基本用法
memset(str, 0, sizeof(str));
strcpy(str, "i love china!");
result = sscanf(str, "%s %s %s", buf1, buf2, buf3);
printf("%d\n%s\n%s\n%s\n", result, buf1, buf2, buf3);
/**
* 执行结果:
* 3
* i
* love
* china!
* 可以看出,sscanf的返回值为读取的参数个数
*/
//读取指定长度的字符串
memset(str, 0, sizeof(str));
strcpy(str, "abcdefghijklmnopq");
sscanf(str, "%5s", buf4);
printf("%s\n", buf4);
/**
* 执行结果:
* abcde
*/
//正则匹配字符串
memset(str, 0, sizeof(str));
memset(buf1, 0, sizeof(buf1));
memset(buf2, 0, sizeof(buf2));
memset(buf3, 0, sizeof(buf3));
strcpy(str, "123456abcdedfANDFS");
sscanf(str, "%[0-9]%[a-z]%[A-Z]", buf1, buf2, buf3);
printf("%s\n%s\n%s\n", buf1, buf2, buf3);
/**
* 执行结果:
* 123456
* abcdedf
* ANDFS
* 很难相信c语言竟然支持正则,不过c支持的正则挺弱的
*/
return 0;
}
本文详细介绍了C语言中用于解析字符串的sscanf()函数的使用方法,包括其函数原型、参数解释及实际应用案例。特别强调了sscanf()函数在处理字符串时的灵活性和实用性,通过实例展示了如何利用它读取指定长度的字符串以及如何通过正则表达式匹配特定字符。
1776

被折叠的 条评论
为什么被折叠?



