格式化字符串输入—— sscanf
该函数包含在 <cstdio>
库中。
- 常见用法,将字符串以字符串的形式存储在
buf
中。
char buf[512];
sscanf("123456","%s",buf);
printf("%s\n",buf);
结果为: 123456
- 将字符串以整形的形式存储在
buf
中。
sscanf("123456","%d",buf);
printf("%d\n",buf);
结果为: 123456
- 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
sscanf("123456","%4s",buf);
printf("%s\n",buf);
结果为: 1234
- 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
sscanf("123456 abcdedf","%[^ ]", buf);
printf("%s\n",buf);
结果为: 123456
- 取仅包含指定字符集的字符串。如在下例中,取仅包含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@122
,获取/
和@
之间的字符串,先将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
格式化字符串输出—— sprintf
该函数包含在 <cstdio>
库中。
- 常见用法,把一个整数打印成一个字符串保存在
buf
中。
sprintf(buf,"%d",123);
printf("%s",s);
结果为: 123
- 可以同时将多个整数连续打印成字符串保存在
buf
中。
sprintf(buf,"%d+%d",123,123);
printf("%s",s);
结果为: 123+123
- 把整数打印成字符串保存在
buf
中,并指定宽度、左对齐、右对齐,不足位补空格。
sprintf(buf,"%8d-8d%d",12345,123,1);
printf("%s",s);
结果为: 12345123 1
(第一个右对齐,第二个左对齐,第三个正常输出)
- 将一个整数按照16进制(或者其他进制)打印成字符串保存在
buf
中,同时可以补零。
sprintf(buf,"%x %X %04x",123,123);
printf("%s",s);
结果为: 7b 7B 007b
- 将一个浮点数打印成字符串保存在
buf
中,并控制精度。
sprintf(buf,"%.4lf",3.1415926);
printf("%s",s);
结果为: 3.1416
- 连接字符串并打印成字符串保存在
buf
中。
sprintf(buf,"%s %s","LaoguanTX","NB");
printf("%s",s);
结果为: LaoguanTX NB
例题
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int n,num1,num2;
char s[10001],a;
int main(){
scanf("%d",&n);
while(n--){
scanf("%s",s);
if(s[0]<'0'||s[0]>'9'){
a=s[0];
scanf("%d",&num1);
scanf("%d",&num2);
}else{
sscanf(s,"%d",&num1);
scanf("%d",&num2);
}
memset(s,0,sizeof(s));
if(a=='a'){
sprintf(s,"%d+%d=%d",num1,num2,num1+num2);
}
if(a=='b'){
sprintf(s,"%d-%d=%d",num1,num2,num1-num2);
}
if(a=='c'){
sprintf(s,"%d*%d=%d",num1,num2,num1*num2);
}
printf("%s\n%d\n",s,strlen(s));
}
return 0;
}