sscanf 函数的原型:
第一个函数参数 const char * 表示字符串
? ? (类似于scanf)第二个函数参数表示 格式
? ? ?????????????????????????????????????????第三个函数参数?
首先sscanf函数可以用于以下几种情况:
分离数字:
#include <stdio.h>
int main()
{
?? ?int a,b;
?? ?sscanf("12334","%3d%2d",&a,&b); // 解析:从第一个字符开始,%3d表示取三个字符(组成数字),%2d表示取二个字符(组成数字)
?? ?printf("%d\n",a);
?? ?printf("%d\n",b);
?? ?return 0;
}
效果:
#include <stdio.h>
int main()
{
?? ?int a,b;
?? ?sscanf("sfda12334","%3d%2d",&a,&b);
?? ?printf("%d\n",a);
?? ?printf("%d\n",b);
?? ?return 0;
}
//解析:这种情况是因为字符串中第一个字符不是‘0’~‘9’则无法取出
分离字符串:
1.#include <stdio.h>
int main()
{
?? ?int a,b;
?? ?char str[128] = { '\0' };
?? ?sscanf("fdas2332fdfd","%127[a-z]%4d",str,&b); 解析:127表示可取127个字符放在str中, [a-z]表示只能取[a-z]?
?? ?printf("%s\n",str);
?? ?printf("%d\n",b);
?? ?return 0;
}
2.%*s %*d 表示跳过:
#include <stdio.h>
int main()
{
?? ?int a,b;
?? ?char str[128] = { '\0' };? ?跳过前面5个字符? ?0表示补位
?? ?sscanf("fdas2332fdfd","%*5s%04d",&b);
?? ?/*printf("%s\n",str);*/
?? ?printf("%d\n",b);
?? ?return 0;
}
3.%.[]s表示宽度
#include <stdio.h>
int main()
{
?? ?int i = 0;
?? ?int k = 0;
?? ?char arr[10] = { '\0' };
?? ?sscanf("asfda223fds","%5s",arr);
?? ?puts(arr);
?? ?return 0;
}
4.%[][a-z]
#include <stdio.h>
int main()
{
?? ?int i = 0;
?? ?int k = 0;
?? ?char arr[10] = { '\0' };
?? ?sscanf("asfda223fds","%9[a-z]",arr); 从第一个字符开始:取9个字符(只能取[a-z])
?? ?puts(arr);
?? ?return 0;
}
#include <stdio.h>
int main()
{
?? ?int i = 0;
?? ?int k = 0;
?? ?char arr[10] = { '\0' };
?? ?sscanf("asfda223fds","%[a-z]",arr);这种形式也是对的
?? ?puts(arr);
?? ?return 0;
}
5.%[^]
#include <stdio.h>
int main()
{
?? ?int i = 0;
?? ?int k = 0;
?? ?char arr[10] = { '\0' };
?? ?sscanf("SADFASasfda223fds","%[^a-z]",arr);(除了a-z的字符)
?? ?puts(arr);
?? ?return 0;
}
#include <stdio.h>
int main()
{
?? ?int i = 0;
?? ?int k = 0;
?? ?char arr[10] = { '\0' };
?? ?sscanf("asfda223fds","%[^a-z]",arr);
?? ?puts(arr);
?? ?return 0;
}
这种情况就不行:由于开头就是'a' ,又因为不能取a-z中的字符,所以就在开头死循环