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. [Js代码风格]浅析模块模式

    1.实例解释模块模式 简明扼要的说,经典的模块模式指的定义一个立即执行的匿名函数.在函数中定义私有函数和私有变量并且返回一个包含公共变量和公共函数作为属性和方法的匿名对象. var classicMo ...

  2. 入门phantomjs

    前言 phantomjs是一个无界面浏览器,用来操作web页面的一个工具,比如登录,提交表单等等. 语法框 //创建一个浏览器对象 var page = require('webpage').crea ...

  3. ivew-admin 导入excel

    1.使用上传组件 <Upload ref="upload" name="importData" action="/api/device/impo ...

  4. org.apache.http.client.HttpClient使用方法

    一.org.apache.commons.httpclient和org.apache.http.client区别(转)   官网说明: http://hc.apache.org/httpclient- ...

  5. JavaSE---多线程---概述

    1.概述 1.1 进程: 系统进行资源分配.调度的一个独立单元: 进程的特征: 1.1.1 独立性: 系统中独立存在的实体,拥有自己独立的资源: 每个进程都拥有自己私有的地址空间,在没有经过进程本身允 ...

  6. ceph学习笔记之十二 Ubuntu安装部署Ceph J版本

    https://cloud.tencent.com/info/2b70340c72d893c30f5e124e89c346cd.html 安装Ubuntu系统安装步骤略过 拓扑连接: 一.安装前准备工 ...

  7. mysql数据库帐号权限设置

    1.创建帐号 2.给帐号赋权限(xinjinlong帐号只有查看sakila表的权限) 3.更改密码 4.取消授权 revoke all on *.* from sss@localhost ;

  8. 接口测试——postman安装

    http://www.jianshu.com/p/dd0db1b13cfc postman的视频终于过审了,https://ke.qq.com/course/229839#tuin=1eb87ef,大 ...

  9. python基础-包和模块

    Python基础-包与模块 写在前面 如非特别说明,下文均基于Python3 摘要 为重用以及更好的维护代码,Python使用了模块与包:一个Python文件就是一个模块,包是组织模块的特殊目录(包含 ...

  10. PicoCTF 2013 Dark Star 分析

    0x00题目 题目可以从GitHub中找到:https://github.com/picoCTF/2013-Problems/blob/master/Dark%20Star/darkstar.img ...