C语言中字符串处理函数sscanf的用法

 更新时间:2023年08月21日 09:36:55   作者:algsup  
一直对于一些日期字符串中数字的提取比较头疼,现看到 sscanf 对于字符串中的内容提取较方便,本文主要介绍了C语言中字符串处理函数sscanf的用法,具有一定参考价值,感兴趣的可以了解一下

前言:

一直对于一些日期字符串中数字的提取比较头疼,现看到 sscanf 对于字符串中的内容提取较方便,学习记录如下。方便以后查询。

sscanf() :将 C 语言字符串中数据按 指定的格式 将数据存储在对应的参数中。

1、函数格式

// sscanf() 会从 buffer 里读进数据,依照 format 的格式将数据写入到 argument 里,注意这里的 argument 需要使用地址符号
// 转换格式参考 scanf() 即可
int sscanf(const char *buffer, const char *format, [argument ]... );

2、返回值

成功则返回参数数目,失败则返回-1,错误原因存于errno中。

说明:

3、支持集合操作

  •  %[a-z] 表示匹配 a 到 z 中任意字符,贪婪性(尽可能多的匹配);
  • %[aB] 匹配 a、B 中一员,贪婪性;
  • %[^a] 匹配非 a 的任意字符,并且停止读入,贪婪性;

4、测试代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
    // sscanf() 会从 buffer 里读进数据,依照 format 的格式将数据写入到 argument 里,注意这里的 argument 需要使用地址符号
    // format 格式参考 scanf() 的输入格式即可
    // 1、取需要的字符串
    int year,month,day;
    sscanf("2022.09.21","%d.%d.%d",&year,&month,&day);// 提取年、月、日
    printf("%d %d %d\n",year,month,day);
    //2、 %ns 提取长度为 n 的字符串
    char str1[10];
    sscanf("20220901000","%8s",str1);// 提取长度为 8 的字符串
    printf("%s\n",str1);
    // 3、将数字表示的字符串转换为整型变量
    int num;
    sscanf("123456","%d",&num);
    printf("%d\n",num);
    // 4、取到指定字符为止的字符串
    char str2[10];
    sscanf("test 01","%[^ ]",str2);// 取遇到空格为止的字符串
    puts(str2);
    char str3[10];
    sscanf("test/01","%[^/]",str3);// 取遇到'/'为止的字符串
    puts(str3);
    // 5、取仅包含指定字符集的字符串
    char str4[20];
    sscanf("123456testSIX","%[1-9a-z]",str4);// 只取数字和小写字母
    puts(str4);
    // 6、跳过不想要的数据
    char str5[20];
    // %s 读取时是以空格和换行作为结束标志的!
    sscanf("test TEST","%*s%s",str5);// 使用 %*s 来跳过前一个字符串
    puts(str5);
    // 给定一个字符串test/unique_11@qq.com,获取 / 和 @ 之间的字符串
    char str6[20];
    sscanf("test/unique_11@qq.com","%*[^/]/%[^@]",str6);// 先把 test/ 过滤掉,再将非'@'的一串内容送到 str6 中
    puts(str6);
    char buf[30];
    sscanf("123456abcdedfBCDEF","%[1-9A-Z]",buf);// 遇到不是1-9或者A-Z的字符时,即遇到小写字母时,就已经结束
    printf("%s\n",buf);
    return 0;
}

测试结果:

2022 9 21
20220901
123456
test
test
123456test
TEST
unique_11
123456

5、参考文章

到此这篇关于C语言中字符串处理函数sscanf的用法的文章就介绍到这了,更多相关C语言 sscanf内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • C语言的递归函数详解

    C语言的递归函数详解

    这篇文章主要为大家介绍了C语言的递归函数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • VC6.0常用快捷键大全

    VC6.0常用快捷键大全

    这篇文章主要介绍了VC6.0常用快捷键大全,非常实用,需要的朋友可以参考下
    2014-08-08
  • C语言中dlopen和dlsym的使用方式详解

    C语言中dlopen和dlsym的使用方式详解

    这篇文章主要为大家详细介绍了C语言中dlopen和dlsym的使用方式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 嵌入式C实战项目开发技巧:对一个有规律的数组表进行位移操作的方法

    嵌入式C实战项目开发技巧:对一个有规律的数组表进行位移操作的方法

    今天小编就为大家分享一篇关于嵌入式C实战项目开发技巧:对一个有规律的数组表进行位移操作的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • C++ plog日志使用方法介绍

    C++ plog日志使用方法介绍

    最近突然心血来潮,想学一下日志方面的操作。在网上找了很多日志相关的技术,最终还是决定使用plog,小巧,快速,跨平台
    2022-10-10
  • C++ 内存管理深入解析

    C++ 内存管理深入解析

    C++内存管理分栈、堆、全局/静态区等,需手动控制动态内存分配,通过new/delete管理对象生命周期,推荐使用智能指针和RAII原则避免内存泄漏、悬空指针等错误,确保程序安全高效运行,本文给大家介绍c++内存管理的相关知识,感兴趣的朋友一起看看吧
    2023-10-10
  • C语言实现逆波兰式实例

    C语言实现逆波兰式实例

    这篇文章介绍了C语言实现逆波兰式实例,有需要的朋友可以参考一下
    2013-09-09
  • C++重载输入和输出运算符详解

    C++重载输入和输出运算符详解

    在C++中,标准库本身已经对左移运算符<<和右移运算符>>分别进行了重载,使其能够用于不同数据的输入输出,本节以前面的 complex 类为例来演示输入输出运算符的重载,需要的朋友可以参考下
    2023-09-09
  • C++中signed main和int main的区别

    C++中signed main和int main的区别

    这篇文章介绍了C++中signed main和int main的区别,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • OpenCV图像处理之实现图像膨胀腐蚀操作

    OpenCV图像处理之实现图像膨胀腐蚀操作

    图像形态学操作是指基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学对图像进行处理。本文将为大家介绍一下如何利用OpenCV实现其中的腐蚀和膨胀操作,需要的可以参考一下
    2022-09-09

最新评论