sscanf的简介

sscanf 函数的原型

第一个函数参数 const char * 表示字符串

    (类似于scanf)第二个函数参数表示 格式

                     ​​​​​​​        ​​​​​​​  第三个函数参数 

首先sscanf函数可以用于以下几种情况:

分离数字:

#include
int main()
{
    int a,b;
    sscanf("12334","%3d%2d",&a,&b); // 解析:从第一个字符开始,%3d表示取三个字符(组成数字),%2d表示取二个字符(组成数字)
    printf("%d\n",a);
    printf("%d\n",b);
    return 0;
}

效果:sscanf的简介_第1张图片

#include
int main()
{
    int a,b;
    sscanf("sfda12334","%3d%2d",&a,&b);
    printf("%d\n",a);
    printf("%d\n",b);
    return 0;
}

//解析:这种情况是因为字符串中第一个字符不是‘0’~‘9’则无法取出

sscanf的简介_第2张图片

分离字符串:

1.#include
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;
}

sscanf的简介_第3张图片

2.%*s %*d 表示跳过:

#include
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
int main()
{
    int i = 0;
    int k = 0;
    char arr[10] = { '\0' };
    sscanf("asfda223fds","%5s",arr);
    puts(arr);
    return 0;
}

sscanf的简介_第4张图片

4.%[][a-z]

#include
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
int main()
{
    int i = 0;
    int k = 0;
    char arr[10] = { '\0' };
    sscanf("asfda223fds","%[a-z]",arr);这种形式也是对的
    puts(arr);
    return 0;
}

5.%[^]

#include
int main()
{
    int i = 0;
    int k = 0;
    char arr[10] = { '\0' };
    sscanf("SADFASasfda223fds","%[^a-z]",arr);(除了a-z的字符)
    puts(arr);
    return 0;
}

sscanf的简介_第5张图片

#include
int main()
{
    int i = 0;
    int k = 0;
    char arr[10] = { '\0' };
    sscanf("asfda223fds","%[^a-z]",arr);
    puts(arr);
    return 0;
}

这种情况就不行:由于开头就是'a' ,又因为不能取a-z中的字符,所以就在开头死循环

你可能感兴趣的:(算法)