printf

int a = ;
printf ("%3d", a);//将打印 035
printf(“%-*s”, width, string);
  
  “*”: 在这里用width代替,其实和printf(“%-10s”, string) 一样,都是控制左对齐的,只是把“”这个数字给参数化了。

scanf

fscanf里面一般不写反斜杠n

定义函数     int sscanf (const char *str,const char * format,........);

函数说明     sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。

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

范例     #include<stdio.h>

main()

{

int i;

unsigned int j;

char input[ ]=” 0x1b aaaaaaaa bbbbbbbb”;

char s[];

sscanf(input,”%d %x %[a-z] %*s %f”,&i,&j,s,s);

printf(“%d %d %s\n”,i,j,s);

}

.常见用法。

char str[] = {};

sscanf("123456 ", "%s", str);

printf("str=%s\n", str);

.取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。

    sscanf("123456 ", "%4s", str);

    printf("str=%s\n", str);

.取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。

    sscanf("123456 abcdedf", "%[^ ]s", str);

    printf("str=%s\n", str);

.         取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。

    sscanf("123456abcdedfBCDEF", "%[1-9a-z]s", str);

    printf("str=%s\n", str);

.         取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。

    sscanf("123456abcdedfBCDEF", "%[^A-Z]s", str);

    printf("str=%s\n", str);

sscanf可以支持格式字符%[] 这为分析字符串提供了很大方便(其实scanf也支持%[])

先看一下%[] 格式:

()-: 表示范围,如:%[-]表示只读取1-9这几个数字 %[a-z]表示只读取a-z小写字母,类似地 %[A-Z]只读取大写字母

()^: 表示不取,如:%[^]表示读取除''以外的所有字符 %[^/]表示除/以外的所有字符

(),: 范围可以用","相连接 如%[-,a-z]表示同时取1-9数字和a-z小写字母

()原则:从第一个在指定范围内的数字开始读取,到第一个不在范围内的数字结束%s 可以看成%[] 的一个特例 %[^ ](注意^后面有一个空格!)

这样使用sscanf+%[]可以轻松的分析字符串,很多字符串问题便迎刃而解了。

以hrbeu3001为例(不是完整代码,没有要求的格式)

只需2个sscanf函数,就能完成题目的要求,代码非常简洁。

#include <stdio.h>

#include <string.h>

int main(int argc, char *argv[])

{

     char buf[],str1[],str2[],str3[],str4[],temp[]="<default>";

     int count;

     scanf("%d",&count);

     while(count--)

     {

        str1[]='\0';

        str2[]='\0';

        str3[]='\0';

        str4[]='\0';

        scanf("%s",buf);

        sscanf(buf,"%[^:]://%[^:,/]:%[,1-9]",str1,str2,str3,str4);

        sscanf(buf,"%[^:]://%[^:,/]/%[a-z,A-Z,/,~]",str1,str2,str4);

        if(str3[]=='\0')strcpy(str3,temp);

        if(str4[]=='\0')strcpy(str4,temp);

        printf("%s\n%s\n%s\n%s\n",str1,str2,str3,str4);

     }

     return ;

}

------------------------------------------------------------------------------------------------------------------------

名称:

sscanf() - 从一个字符串中读进与指定格式相符的数据.

函数原型:

Int  sscanf( string str, string fmt, mixed var1, mixed var2 ... );

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

说明:

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

其中的format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号}

注:

、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)

、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。

、width表示读取宽度。

、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。

、type :这就很多了,就是%s,%d之类。

、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值

支持集合操作:

     %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)

     %[aB'] 匹配a、B、'中一员,贪婪性

     %[^a] 匹配非a的任意字符,贪婪性

例子:

. 常见用法。

    char buf[] = {};

    sscanf("123456 ", "%s", buf);

printf("%s\n", buf);

结果为:

. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。

    sscanf("123456 ", "%4s", buf);

printf("%s\n", buf);

结果为:

. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。

    sscanf("123456 abcdedf", "%[^ ]", buf);

printf("%s\n", buf);

结果为:

.  取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。

    sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);

printf("%s\n", buf);

结果为:123456abcdedf

.  取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。

    sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);

printf("%s\n", buf);

结果为:123456abcdedf

、给定一个字符串iios/12DDWDFF@,获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中

sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf);

printf("%s\n", buf);

结果为:12DDWDFF

、给定一个字符串““hello, world”,仅保留world。(注意:“,”之后有一空格)

sscanf(“hello, world”,  "%*s%s",  buf);  

printf("%s\n", buf);

结果为:world

%*s表示第一个匹配到的%s被过滤掉,即hello被过滤了

如果没有空格则结果为NULL。

sscanf的功能很类似于正则表达式, 但却没有正则表达式强大,所以如果对于比较复杂的字符串处理,建议使用正则表达式.
按十六进制读取
int main()
{
char a[] = "";
int b;
sscanf(a, "%x", &b);
cout<<b;
return ;
}
%n 可以将所输出字符串的长度值赋绐一个变量, 见下例:
int slen;
printf("hello world%n", &slen);
执行后变量被赋值为11。
sscanf和scanf类似,只是从字符串输入而已
sscanf(p,"%s%n",a,&t)
就是将字符串p输入到a中,长度赋值到t

printf sscanf进阶的更多相关文章

  1. C/C++格式化输入,输出

    C/C++格式化输入,输出 1.C语言 1. 语言函数 scanf(); printf(); sscanf() --> 不安全 sscanf_s() ---> 安全 sprintf() - ...

  2. C C++ POSIX 的一些 IO 操作

    一些 C C++ POSIX 的 IO 操作总结 文件-内存之间 内存-内存之间 POSIX 有无缓冲的 IO 操作 对文件的操作,读文件至内存,从内存写至文件 // 读文件至内存buf中 void ...

  3. sscanf和sprintf是scanf和printf家族用法 (转)

    sscanf和sprintf是scanf和printf家族用法 sscanf和sprintf是scanf和printf家族的一对成员,用于处理和分析字符串非常强大得两个函数头文件 stdio.h原型i ...

  4. PHP字符串函数之 sscanf echo print sprintf vsprintf printf vprintf fprintf vfprintf

    sscanf – 根据指定格式解析输入的字符 echo – 输出一个或多个字符串 print – 输出字符串 sprintf – 返回格式化字符串 vsprintf – 返回格式化字符串 (参数为数组 ...

  5. 浅析C语言中printf(),sprintf(),scanf(),sscanf()的用法和区别

    printf语法: #include <stdio.h>int printf( const char *format, ... ); printf()函数根据format(格式)给出的格式 ...

  6. printf的用法进阶

    今天来好好总结一下C语言中关于printf的常用用法 基础部分 printf("%d\n", numInt); printf("%f\n", numFloat) ...

  7. Golang的交互模式进阶-读取用户的输入

    Golang的交互模式进阶-读取用户的输入 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 读写数据除了 fmt 和 os 包,我们还需要用到 bufio 包来处理缓冲的输入和输出. ...

  8. C语言关于利用sscanf实现字符串相加减

    #include<stdio.h>#include<string.h>void main(){ int a; int b; char str1[10] = "9999 ...

  9. php自学提升进阶路线

    为了自己对php的系统全面深入的掌握,我通过个人经验,以及搜索网上高手经验,汇总了一份php自我学习路线规划,包括实战演练.学习建议.高手进阶.常见问题和测试总结五块.算是一个系统的学习计划和目标吧. ...

随机推荐

  1. 使用await写异步优化代码

    使用promise: function readMsg(){ return dispatch=>{ axios.post('/msgList').then(res=>{ console.l ...

  2. go语言从例子开始之Example15.闭包

    Go 支持通过 闭包来使用 匿名函数.匿名函数在你想定义一个不需要命名的内联函数时是很实用的. 闭包简单理解,函数反回值是一个函数 Example: package main import " ...

  3. json_value.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticReleas

    注意版本的提示mD  mt 注意动态mfc 还是静态mfc

  4. 一、Centos7安装mysql

    Centos7是通过yum下载的,在mysql找到yum下载链接,然后通过wget命令下载到本地 1. 官网的页面的地址 https://dev.mysql.com/downloads/file/?i ...

  5. 一次goldengate故障引发的操作系统hang起,HA自动切换

    现场: 跑着数据库的主机A报警应用连接不上数据库,我们无法ssh到主机.第一反应是通过telnet到远程控制口,发现数据库资源和硬件资源在被切换到HA架构的主机B(备机,通常性能比主机A的差,抗不住应 ...

  6. Es学习第四课, 倒排索引

    大家知道,ES的发明者初衷是想做一个搜索引擎给自己老婆用来搜菜谱,所以ES的核心工作就是做搜索,下面我们就开始讲关于搜索方面的知识点. DOC的概念我们第一课就讲过,它是ES存储数据的最小单元,我们再 ...

  7. UNP学习第六章select

    一.I/O复用典型的网络应用场合 当客户处理多个描述字时,必须使用I/O复用,这在前一段中已做了描述. 一个客户同时处理多个套接口时可能的,但很少出现. 如果一个TCP服务器既要处理监听套接口,又要处 ...

  8. 【Flutter学习】事件处理与通知之通知(Notification)

    一,概述 Notification是Flutter中一个重要的机制,在Widget树中,每一个节点都可以分发通知,通知会沿着当前节点(context)向上传递,所有父节点都可以通过Notificati ...

  9. Linux下Mysql安装与常见问题解决方案

    1.Mysql安装 环境: Mysql版本: 开始安装: 首先检查环境有没有老版本mysql,有的话先卸载干净,具体百度. 接着先获取mysql的安装包:wget https://dev.mysql. ...

  10. ARMv8 内存管理架构.学习笔记

    http://blog.csdn.net/forever_2015/article/details/50285955 版权声明:未经博主允许不得转载,请尊重原创, 谢谢!   目 录 第1章 分级存储 ...