sscanf()的使用 - Sna1lGo

Sna1lGo 2021-08-02 原文


sscanf()的使用


sscanf()的使用

函数原型:

int sscanf( const char *buffer, const char *format [, argument ] ... );

…表示是一个多参函数,其实就和scanf是一样的,只是从命令行变成了从str中读取

 

针对于第二个const char*format参数有如下变化:

%s或%d 跳过数据
%[width]s 读指定宽度的数据
%[a-z] 匹配a到z中任意字符(尽可能多的匹配)
%[aBc] 匹配a、B、c中一员,贪婪性
%a 匹配非a的任意字符,贪婪性
%a-z 表示读取除a-z以外的所有字符

 

具体实现代码如下

 

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include<stdio.h>
 3 //sscanf的使用
 4 //%*s或%*d 跳过数据
 5 void test_tiaoguoNum()
 6 {
 7     const char *str = "1234asd5abcde";
 8     char buf[1024] = { 0 };
 9     sscanf(str,"%*d%s", buf);
10     printf("%s\n", buf);
11 }
12 //区间跳过%*[]
13 void test_tiaoguoSection()
14 {
15     const char* str = "asdbczs12345";
16     char buf[1024] = { 0 };
17     sscanf(str, "%*[a-z]%s", buf);
18     printf("%s\n", buf);
19 }
20 //指定读取宽度%[width]s
21 void test_SpecifiesWidthRead()
22 {
23     const char* str = "sadhjnkxz";
24     char buf[100] = { 0 };
25     sscanf(str, "%3s", buf);
26     printf("%s\n", buf);
27 }
28 //%[a-z] 匹配到a到z中任意字符
29 void test_MatchingRangeChar()
30 {
31     const char* str = "asdxzc1231a";
32     char buf[100] = { 0 };
33     sscanf(str, "%[a-z]s", buf);
34     printf("%s\n", buf);
35 }
36 //匹配具体的字符
37 //%[abc]
38 void test_Appoint() 
39 {
40     const char* str = "asdxzc1231a";
41     char buf[100] = { 0 };
42     sscanf(str, "%[asdx]", buf);
43     printf("%s\n", buf);
44 }
45 //匹配除了特殊字符以外的字符
46 void test_Matching_not()
47 {
48     const char* str = "asdxzc1231a";
49     char buf[100] = { 0 };
50     sscanf(str, "%[^d]", buf);
51     printf("%s\n", buf);
52 }
53 //匹配除了区间外的所有字符
54 void test_Matching_Not_Range()
55 {
56     const char* str = "asdxzc1231a";
57     char buf[100] = { 0 };
58     sscanf(str, "%[^0-9]", buf);
59     printf("%s\n", buf);
60 }
61 void Section_ip()
62 {
63     const char* str = "172.0.0.1";
64     int num1, num2, num3, num4;
65     sscanf(str, "%d.%d.%d.%d", &num1, &num2, &num3, &num4);
66     printf("%d %d %d %d", num1, num2, num3, num4);
67 }
68 //练习获取指定字符串
69 void test_ex1()
70 {
71     const char* str = "sadasd#zhangtao@1234";
72     char buf[100] = { 0 };
73     sscanf(str, "%*[^#]#%[^@]", buf);
74     printf("%s\n",buf);
75 }
76 void test_ex2()
77 {
78     //匹配出myname字符串
79     const char* str = "123abcd$myname@DDDqwe";
80     char buf[100] = { 0 };
81     sscanf(str, "%*[^$]$%[^@]", buf);
82     printf("%s\n", buf);
83 }
84 //只要有一个匹配失败就不会再匹配了
85 
86 int main(void)
87 {
88     //test_tiaoguoSection();
89     //test_SpecifiesWidthRead();
90     //test_MatchingRangeChar();
91     //test_Matching_not();
92     //test_Matching_Not_Range();
93     //Section_ip();
94     //test_ex1();
95     test_ex2();
96     return 0;

View Code

 1 //查找字串
 2 #define _CRT_SECURE_NO_WARNINGS
 3 #include<stdio.h>
 4 
 5 
 6 int Get_son_string(char* str, char* Tarstr)
 7 {
 8     while (*str != \'\0\')
 9     {
10         if (*str != *Tarstr)//判断能否匹配上子串的第一个数
11         {
12             str++;
13             continue;
14         }
15         char* temp1= ++str, * temp2=++Tarstr;//如果第一个匹配成功
16         while (1)
17         {
18             if (*temp2 == \'\0\')    //如果字串取完说明匹配成功
19             {
20                 return 1;
21             }
22             if (*temp1 != *temp2)    //如果不等于就退出循环
23             {
24                 break;
25             }
26             //如果下一个还是成功就继续后移
27             temp1++;
28             temp2++;
29         }
30     }
31     return 0;
32 
33 }
34 
35 void main(void)
36 {
37     char str[] = "sadasddnfaxzcz";
38     char Tarstr[] = "dnf";
39     int ret = Get_son_string(str, Tarstr);
40     if (ret == 1)
41     {
42         printf("有字串\n");
43     }
44     else
45     {
46         printf("没有这字串\n");
47     }
48 }

View Code

 

posted on
2020-11-26 00:46 
Sna1lGo 
阅读(91
评论(0
编辑 
收藏 
举报

 

版权声明:本文为Sna1lGo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Sna1lGo/p/14040104.html

sscanf()的使用 - Sna1lGo的更多相关文章

  1. 完整后端开发流程 – 乘着风去破浪

    完整后端开发流程 2018-05-27 11:36  乘着风去破浪  阅读(6574)  评论(0)  编辑  […]...

  2. NoSQL 数据库案例实战 — MongoDB数据备份、恢复

    MySQL数据迁移到MongoDB数据库中 前言 一、数据备份 二、数据恢复   前言 本环境是基于 Cent […]...

  3. linux之基础命令大全 – 跳动de手指

    linux之基础命令大全 作为测试人员对linux系统命令必须非常熟悉,尤其对于高级测试工程师,从事性能方面测 […]...

  4. itest(爱测试) 4.3.0 发布,开源BUG 跟踪管理 & 敏捷测试管理软件

    本次发布一共27个更新:其中21个优化增强(用例库重写,更易用,如用例目录可拖拽移动,可上下调显示顺序,可导入 […]...

  5. 【PS滤镜】SkinFiner(人像皮肤美化) – 开发小飞

    【PS滤镜】SkinFiner(人像皮肤美化) 1、滤镜说明 SkinFiner是一款简单易用的磨皮美肤软件。 […]...

  6. SciTE – 又一款小巧的文本编辑器 – 小众软件

    SciTE – 又一款小巧的文本编辑器 – 小众软件 SciTE – 又一款小巧的文本编辑器 收藏 […]...

  7. MATLAB简单实现ID3 – 不秩稚童

      再看《MATLAB数据分析与挖掘实战》,简单总结下今天看到的经典的决策树算法——ID3.   ID3:在决 […]...

  8. java webservice – cxf使用总结 一

    1.创建maven项目 加入pom依赖 <dependency> <groupId>o […]...

随机推荐

  1. 爸爸和无我编程十条诫律

    在爸爸去世前,我和他谈论了2个星期关于编程的事。我22岁,一个在大学里攻读美术设计的四年级的学生。爸爸62岁, […]...

  2. 在蚂蚁金服工作是一种什么体验

    前段时间,胡润研究院发布了《2019胡润全球独角兽榜》,来自中国的三家公司包揽前三,分别是位于杭州的蚂蚁金服, […]...

  3. 企业微信登录态与显示姓名

    以下是官方技术人员回答 1.agentconfig通过或有登录态,都是可以正常展示了,部分浏览器不兼容2.ag […]...

  4. 【原创】使用批处理脚本生成包并自动上传到nuget

      Hello 大家好,我是TANZAME,我们又见面了。   NuGet 是什么这里就不再重复啰嗦,园子里一 […]...

  5. Win7 64位操作系统连接HP 1010打印机完美解决方案

    工作的第一天就遇到问题,新电脑无法连接老式的HP1010打印机,64位Windows7系统无法连接32位XP网 […]...

  6. 大型网站架构演化发展历程

    目录 一、大型网站系统的特点 二、大型网站的演变过程 1. 初始阶段的网站架构 2. 应用服务和数据分离 3. […]...

  7. 基于python的Selenium使用小结

      之前介绍过基于Unittest和TestNG自动化测试框架,然而基于Web端的测试的基础框架是需要Sele […]...

  8. 一键安装php5.6.40脚本(LAMP环境)

    #!/bin/bash #安装依赖软件 yum -y install libxml2-devel curl-d […]...

展开目录

目录导航