sprintf() sscanf()的使用

看了一些博客后,自己总结了一下,力求简单明了地说出这两个函数的作用和使用方法

1.sprintf()函数

  sprintf函数原型为 int sprintf(char *str, const char *format, ...)

        按我的话来说,参数分为三部分,第一部分str是要存放转换结果的字符串,参数第二部分" ....."是转换的格式,第三部分是转换的原对象

        作用是格式化字符串,具体功能如下所示:

(1)将数字变量转换为字符串

  #include<stdio.h>
int main()
{
    char str[100];
    int a=10;
    sprintf(str,"%d",a);//存放结果的字符串为str,按十进制转换,转化的对象是a
    printf("%s\n",str);
}

(2)得到整型变量的16进制和8进制字符串。

#include<stdio.h>
int main()
{
	char str[100];
	int a=16;
	sprintf(str,"%x",a);
	printf("%d转换为十六进制:%s\n",a,str);
	sprintf(str,"%o",a);
	printf("%d转化为八进制:%s\n",a,str);
}

(3)连接多个字符串。

#include<stdio.h>
int main()
{
	char str[100];
	char a[20]="I am ";
	char b[20]="a ";
	char c[20]="student";
	sprintf(str,"%s%s%s",a,b,c);
	printf("%s\n",str);
}
2.sscanf()函数

    原型:int sscanf (const char *str,const char * format,........);

     按我的话来说,参数分为三部分,第一部分str是转换的原对象,参数第二部分" ....."是转换的格式,第三部分是要存放转换结果的字符串,跟sprintf相反

   1.取前N个字符 "%Ns"

  

#include<stdio.h>
int main()
{
	char str[100];
	sscanf("123456 abcd","%4s",str);
	printf("%s\n",str); //1234
}
   2.取前面指定字符集的串,遇到非指定字符集内的元素就停止,字符集可以只有一个元素,可以是空格

#include<stdio.h>
int main()
{
    char str[100];
    sscanf("123456 123abcd","%[1-9]s",str);//取前面在1~9之间的字符,遇到不是该字符集内的字符,停止 
    printf("%s\n",str);//123456 
    char str1[100];
    sscanf("123456 123abcd","%[1]s",str1);//字符集只有一个元素'1',所以同样,取前面的1的字符,遇到不是就停止 
    printf("%s\n",str1);
}
    3. ^表示取反, [^a-z]表示从原字符串中取第一个字符起,不在a-z之间的字符,遇到是a-z这个范围的就停止

#include<stdio.h>
int main()
{
    char str[100];
    sscanf("123456 123abcd","%[^a-z]s",str);//取前面在不再a-z之间的字符,遇到是该字符集内的字符,停止 
    printf("%s\n",str);//123456 
    char str1[100];
    sscanf("123456 123abcd","%[^z]s",str1);//取前面不是的z的字符,遇到是就停止 
    printf("%s\n",str1);
    char str2[100];
    sscanf("123456 123abcd","%[^ ]s",str2);//读取到空格 停止[^ ] 
    printf("%s\n",str2);
}
注意: 字符分大小写[a-z] [A-Z]两者的字符集不同

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

         遇到不再内的字符就停止
(2)^: 表示不取,如:%[^1]表示读取除字符串前'1'以外的所有字符 %[^ #]表示字符串前除‘#’以外的所有字符
(3),: 范围可以用","相连接 如%[1-9,a-z]表示同时取1-9数字和a-z小写字母

原则:从第一个在指定范围内的数字开始读取,到第一个不在范围内的数字结束

部分内容来自:http://www.cnblogs.com/gudu0723/archive/2012/11/02/2751400.html

                        http://www.cnblogs.com/Anker/p/3351168.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值