ssacanf\Sprintf格式化字符串

一、sscanf

sscanf() - 从一个  int sscanf(const char *buffer,const char *format,[argument ]...);

  buffer 存储的数据
  format 格式控制字符串
  argument 选择性设定字符串
  sscanf会从buffer里读进数据,依照argument的设定将数据写回。字符串中读进与指定格式相符的数据.

说明;sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。 

  1. 常见用法。

  char buf[512] ;
  sscanf("123456 ", "%s", buf);//此处buf是数组名,它的意思是将123456以%s的形式存入buf中!
  printf("%s\n", buf);
  结果为:123456
  2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
  sscanf("123456 ", "%4s", buf);
  printf("%s\n", buf);
  结果为:1234
  3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
  sscanf("123456 abcdedf", "%[^ ]", buf);
  printf("%s\n", buf);
  结果为:123456

    4、格式字符串可以有多个

     int data1,data2,data3,data4;

    char a[]="192.16.1.1";

 sscanf(a,"%d.%d.%d.%d",&data1,&data2,&data3,&data4);

printf("data1=%d,data2=%d,data=3%d,data=4%d\n",data1,data2,data3,data4);

结果为:data1 =192,data2 =16,data3= 1,data4 =1;

5\格式字符串可以有多个,可以非常方便的分割IP地址和MAC地址等数据

     int data1,data2,data3,data4;

    char a[]="192:16:1:1";

 sscanf(a,"%d:%d:%d:%d",&data1,&data2,&data3,&data4);

printf("data1=%d,data2=%d,data=3%d,data=4%d\n",data1,data2,data3,data4);

结果为:data1 =192,data2 =16,data3= 1,data4 =1;

6、类似字符串中的用法

  用它来分隔类似这样的字符串2006:03:18:

  int a, b, c;

  sscanf("2006:03:18", "%d:%d:%d", &a, &b, &c);
  以及2006:03:18 - 2006:04:18:
  char sztime1[16] = "", sztime2[16] = "";
  sscanf("2006:03:18 - 2006:04:18", "%s - %s", sztime1, sztime2);
  但是后来,我需要处理2006:03:18-2006:04:18
  仅仅是取消了‘-’两边的空格,却打破了%s对字符串的界定。
  我需要重新设计一个函数来处理这样的情况?这并不复杂,但是,为了使所有的代码都有统一的风格,我需要改动很多地方,把已有的sscanf替换成我自己的分割函数。我以为我肯定需要这样做,并伴随着对sscanf的强烈不满而入睡;一觉醒来,发现其实不必。
  format-type中有%[]这样的type field。如果读取的字符串,不是以空格来分隔的话,就可以使用%[]。
  %[]类似于一个正则表达式。[a-z]表示读取a-z的所有字符,[^a-z]表示读取除a-z以外的所有字符。
  所以那个问题也就迎刃而解了:
  sscanf("2006:03:18 - 2006:04:18", "%[0-9,:] - %[0-9,:]", sztime1, sztime2);

8、给定一个字符串"hello, world",仅保留world。(注意:","之后有一空格,%s遇空格停止,加*则是忽略第一个读到的字符串

  sscanf("hello, world", "%*s%s", buf);
  printf("%s\n", buf);
  结果为:world
   %*s表示第一个匹配到的%s被过滤掉,即hello被过滤了

二、sprintf函数:函数功能:把格式化的数据写入某个字符串

  sprintf 是个变参函数,定义如下:

  int sprintf( char *buffer, const char *format [, argument] ... );
  除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:


例子:
char* who = "I";
char* whom = "CSDN";
sprintf(s, "%s love %s.", who, whom); //产生:"I love CSDN. "  这字符串写到s中sprintf(s, "%10.3f", 3.1415626); //产生:" 3.142"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

防火墙规则

1、iptables -t -L -n -t指定表格 -L 显示目前表格的规则 -n 数字显示2、iptables-save 以命令方式显示规则3、清除清空filter从头制定规则 ipatables -F 清除已经定义 iptables -X 清除自定义链 iptables -z 清除链统计和计数4、设定默认规则,当所有规则不匹…

JAVA中循环删除list中元素的方法总结

印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区。下面就来讲一讲。。伸手党可直接跳至文末。看总结。。 JAVA中循环遍历…

直流有刷电机与无刷电机的区别

首先介绍有刷电机与无刷电机工作原理,最后从调速方式及性能差异这两个方面详细的阐述了有刷电机与无刷电机的区别。 有刷电机与无刷电机工作原理 1、有刷电机 电机工作时,线圈和换向器旋转,磁钢和碳刷不转,线圈电流方向的交替变化…

MapReduce详解

MapReduce简介 MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想。 MapReduce极大地方便了编…

JavaScriptBreak 语句 continue 语句

break 语句用于跳出循环。 continue 用于跳过循环中的一个迭代。 Break 语句 我们已经在本教程之前的章节中见到过 break 语句。它用于跳出 switch() 语句。 break 语句可用于跳出循环。 continue 语句跳出循环后,会继续执行该循环之后的代码(如果有的话…

kernel mtd 分区与UBOOT 分区的理解

今天做内核移植,准备添加NAND flash的驱动,做到MTD分区时,想起在一本书上看到的一句话,说的是分区时每个区之间没有间隙,前一个区的结束地址是后一个区的起始地址。可是当我看我的开发板的教程时,分区如下&…

运放的主要参数详细介绍

1. 引言 运放的作用是调节和放大模拟信号,它是用途十分广泛的器件,接入适当的反馈网络,可用作精密的交流和直流放大器、有源滤波器滤波器、振荡器振荡器及电压比较器。其应用领域包括但不限制通讯、电子、汽车、工业检测等等,并将…

FastDFS 文件上传工具类

FastDFS文件上传工具类 import org.csource.common.NameValuePair;import org.csource.fastdfs.ClientGlobal;import org.csource.fastdfs.StorageClient1;import org.csource.fastdfs.StorageServer;import org.csource.fastdfs.TrackerClient;import org.csource.fastdfs.Tra…

MOS管的主要参数与重要特性

双极性晶体管:NPN和PNP管; 单极性晶体管:场效应管(MOSFET和JFET); MOS管相对三极管具有速度快、输入阻抗高、噪声低、动态范围大、功耗小、容易集成等优点。 下面总结下其主要参数与重要特性&#xff0c…

【Codeforces Round #430 (Div. 2) B】Gleb And Pizza

【链接】点击打开链接 【题意】 在这里写题意【题解】 根据圆心到原点的距离这个东西判断一下圆在不在那个环里面就好【错的次数】 0【反思】 在这了写反思【代码】 #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #…

垂直居中方法总结

<style>#box{position: absolute;margin: auto;top:0px;right: 0px;bottom: 0px;left: 0px;width: 100%;height: 30%;background-color: red;text-align: center;} </style> <body><div id"box"><h1>文字居中</h1></div> …

NAND 坏块管理

NAND的操作管理方式 NAND FLASH的管理方式&#xff1a;以三星FLASH为例&#xff0c;一片Nand flash为一个设备(device)&#xff0c;1 (Device) xxxx (Blocks)&#xff0c;1 (Block) xxxx (Pages)&#xff0c;1(Page) 528 (Bytes) 数据块大小(512Bytes) OOB 块大小(16Bytes&…

js备忘录模式——实现分页点击已经请求过上一页的数据(读js设计模式)

例子&#xff1a;新闻数据实现分页||点击下一页后又点击上一页后不用再次请求数据&#xff0c;避免资源浪费&#xff0c;网速不好&#xff0c;用户体验效果差 备忘录模式&#xff1a;在不破坏对象的封装性的前提下&#xff0c;在对象之外捕获并保存该对象内部的状态以方便日后对…

运放的典型电路举例与计算仿真

运放电路的计算&#xff0c;通过记各种公式很难记住&#xff0c;但是掌握其两个重要概念&#xff0c;所有计算均可迎刃而解。 那就是运放的两个重要特性&#xff1a; 虚断&#xff1a;运放本质特性&#xff0c;输入阻抗大&#xff0c;两个输入端视为等效开路&#xff1b; 虚…

【SPOJ 694】Distinct Substrings (更直接的求法)

【链接】h在这里写链接 【题意】 接上一篇文章【题解】 一个字符串所有不同的子串的个数∑(len-sa[i]-height[i])【错的次数】 0【反思】 在这了写反思【代码】 #include<bits/stdc.h> using namespace std;const int N 2e3; const int MAX_CHAR 300;//每个数字的最大…

HTML-锚点

<!DOCTYPE html> <html> <head lang"en"> <meta charset"UTF-8"> <title>锚点</title> <style> .box1,.box2{ height: 600px; border:1px solid; } </style> </head> <body> <a h…

/dev/mtdN和/dev/mtdblockN的区别

1、/dev/mtdn是linux中的MTD架构中&#xff0c;系统自己实现的mtd分区所对应的字符设备&#xff0c;其里面添加了一些ioctl&#xff0c;支持很多命令&#xff0c;如MEMGETINFO&#xff0c;MEMERASE等。 而mtd-util中的flash_eraseall等工具&#xff0c;就是以这些ioctl为基础而…

#define GPBCON (*(volatile unsigned *)0x56000010) 的理解

2019独角兽企业重金招聘Python工程师标准>>> 对于不同的计算机体系结构&#xff0c;设备可能是端口映射&#xff0c;也可能是内存映射的。如果系统结构支持独立的IO地址空间&#xff0c;并且是端口映射&#xff0c;就必须使用汇编语言完成实际对设备的控制&#xff…

三极管基本参数介绍与放大电路分析

全称为半导体三极管&#xff0c;也称双极型晶体管、晶体三极管&#xff0c;是一种电流控制电流的半导器件&#xff0c;作用是把微弱信号放大成幅度值较大的电信号&#xff0c; 也用作无触点开关。 两个PN结的排列方式有两种&#xff1a;PNP和NPN。 三个端点依序称为射极&#…

Nand分区及nand erase简解

我的nand flash 32M&#xff0c;kernel 2.6.18, rootfs is emb linux, cramfs.nand flash分区如下&#xff1a;static struct mtd_partition nand_partitions[] {/* bootloader (UBL, U-Boot, BBT) in sectors: 0 - 14 */{.name "bootloader",.offset 0,.size 32…