头文件 #include<cstdio> 或 #include<stdio.h>
处理字符串问题的利器,学会它们可能事半功倍。sscanf可以理解为string+scanf,sprintf可以理解为string+printf。
- scanf(“%d”, &n); 可以理解为 scanf(screen, “%d”, &n );
- printf(“%d”, n); 可以理解为 printf(screen, “%d”, n );
也就是说,scanf相当于把screen(屏幕)的内容以“%d”的格式传输到变量n中, printf相当于把n以“%d”的格式传到到 screen(屏幕) 上。
sscanf和sprintf与上面的格式是相同的,只不过把screen (屏幕) 换成了字符数组:
sscanf是从一个字符串中读进与指定格式相符的数据。而sprintf是格式化的数据写入某个字符串中。
#include<cstdio>
using namespace std;
int main(){
int n;
char str1[100]="123",str2[100];
sscanf(str1, "%d", &n); //n=123
sprintf(str2, "%d", n); //str2="123"
printf("%s\n",str2); //输出123
return 0;
}
char nzBuf[10];
sscanf("123456", "%4s", buf); //取最大长度为4字节的字符串
printf("%s\n", buf); //结果:1234
char nzBuf[10];
int i=2,j=3;
sprintf(nzBuf,"%d+%d=5",i,j);
printf("%s\n",nzBuf); //结果:2+3=5
练习:把一串ip和端口数据(如 “192.168.1.0:8080” )中的5个数字从字符串中取到整数数组中。
#include<cstdio>
using namespace std;
int main(){
int n,b[5];
char str1[100]="192.168.1.0:8080",str2[100];
int x=sscanf(str1, "%d.%d.%d.%d:%d", &b[0],&b[1],&b[2],&b[3],&b[4]);
printf("%d\n",x); //输出5
sprintf(str2, "%d %d %d %d %d", b[0],b[1],b[2],b[3],b[4]);
printf("%s\n",str2); //输出192 168 1 0 8080
char str3[100]="192.168.1.0.0:8080"; //假设输入格式与下面不匹配
int y=sscanf(str3, "%d.%d.%d.%d:%d", &b[0],&b[1],&b[2],&b[3],&b[4]); //只有部分变量取值正确
printf("%d\n",y); //输出4,能正确取值的个数
return 0;
}