c++分割字符串我一直是用自定义函数来做的,今天刷题看到一个sscanf函数的用法竟然可以直接分割规则的字符串,太强了,决定做个记录。
数据格式:
%c 一个单一的字符
%d 一个十进制整数
%i 一个整数
%e, %f, %g 一个浮点数
%o 一个八进制数
%s 一个字符串
%x 一个十六进制数
%p 一个指针
%n 一个等于读取字符数量的整数
%u 一个无符号整数
%[] 一个字符集
%% 一个精度符号
date = “2019-06-30”
int year, month, day;
sscanf(date.c_str(), “%d-%d-%d”, &year, &month, &day);
1.取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
sscanf(“123456 abcdedf”, “%[^ ]”, buf);
printf("%s\n", buf);
结果为:123456
2、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非’@'的一串内容送到buf中 sscanf(“iios/12DDWDFF@122”, “%[/]/%[@]", buf);
printf("%s\n", buf);
结果为:12DDWDFF
%[a-z] 表示匹配a到z中任意字符
%[aB’] 匹配a、B、'中一员
%[^a] 匹配非a的任意字符,
“%[^=]” 读入任意多的字符,直到遇到"="停止
"“表示该输入项读入后不赋予任何变量,即跳过该输入值
//////////////////////////////////////////////////////////////////////////////////////////
在搜索sscanf的具体用法时,又发现了strok函数,这里也写上
转自https://blog.csdn.net/sjpz0124/article/details/47710365。
int in=0;
char buffer[]=“Fred,John,Ann”
char *p[3];
char *buff = buffer;
while((p[in]=strtok(buf,”,”))!=NULL) {
i++;
buf=NULL; }
如上代码,第一次执行strtok需要以目标字符串的地址为第一参数(buf=buffer),之后strtok需要以NULL为第一参数(buf=NULL)。指针列p[],则储存了分割后的结果,p[0]=“John”,p[1]=“John”,p[2]=“Ann”,而buf就变成 Fred\0John\0Ann\0。
其实可以看到如果不熟练地话还是很容易出错的,所以这两个函数得多加练习之后再使用。
本文深入解析C++中sscanf与strtok函数的使用技巧,包括如何利用sscanf处理字符串分割,以及strtok在字符串切割任务中的应用实例。通过具体示例,读者可以了解到这些函数的强大功能及其在实际编程中的灵活性。
3671

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



