sscanf的简介

2024-01-01 21:35:52

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中的字符,所以就在开头死循环

文章来源:https://blog.csdn.net/wx20041102/article/details/135328015
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。