sscanf、sprintf简介
sscanf以及sprintf是处理字符串问题的利器,熟练的掌握这两个函数可以在一些算法竞赛中取得一定的优势。首先,sscanf在单词上可以理解为string scanf,sprintf则可以理解为string printf。
现在,我们再来看看scanf以及printf。
如果我们要在屏幕上输入一个int型变量n,并且将int型变量n输出到屏幕上,则可以这样表示:
scanf("%d",&n);
printf("%d",n);
实际上,scanf以及printf还可以这样来理解:
scanf(screen,"%d",&n);
printf(screen,"%d",n);
scanf的意思就是在屏幕screen中输入一个%d格式的变量n(注意此时是从左往右),printf的意思则是将变量n以%d的格式在屏幕screen中输出(从右往左)
sscanf与sprintf的语法格式
现在我们再来看看sscanf与sprintf这两个函数的用法。类似于scanf与printf,只需将上述的screen改成str就可以了(此时的str定义为一个字符数组str[100])
sscanf(str,"%d",&n);
sprintf(str,"%d",n);
上面sscanf的作用是把字符数组str以%d的格式写到n中(此时也是从左向右)。sprintf的作用则是把n以%d的格式写到字符数组str中(从右向左)。值得注意的是str部分只能是字符数组,不可以是字符以及其它形式。format格式部分可以是任何格式,根据问题需要来定义格式。现在给出一个实例,加深对sscanf与sprintf的理解,建议自己亲手操作一番。
#include <stdio.h>
int main()
{
int n1,n2=666;
char str[100]="123";
sscanf(str,"%d",&n1);
printf("%d\n",n1);
sprintf(str,"%d",n2);
printf("%s",str);
return 0;
}
输出结果为:
123
666
sscanf与sprintf的复杂格式的输入与输出
事实上,sscanf与sprintf可以使用像scanf与printf那样进行复杂的输入输出。例如下面代码中使用sscanf把str按照"%d:%lf"的格式写到int型变量n1,double型变量n2中:
#include <stdio.h>
int main()
{
int n1;
double n2;
char str[100]="123:698";
sscanf(str,"%d:%lf",&n1,&n2);
printf("%d\n%lf",n1,n2);
return 0;
}
此时输出为:
123
698.000000
再例如下面代码中使用sprintf把int型变量n1,double型变量n2以%d:%lf的格式写入到字符数组str中:
#include <stdio.h>
int main()
{
int n1=123;
double n2=698;
char str[100];
sprintf(str,"%d:%lf",n1,n2);
printf("%s",str);
return 0;
}
输出结果为:
123:698.000000
最后值得一提的是,sscanf也支持正则表达式,此处不作深入研究。