sscanf与ssprintf

· · 个人记录

今天,我来介绍一下sscanf与ssprintf大法

首先,二者都要加头文件:

include<cstdio> or #include<stdio.h>

sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。

sscanf(s,"%lf",&k);//将这一字符串输出为一个浮点数

sprintf(ss,"%.2f",k);//将这一浮点数输出为一个有两位小数的字符串

原型

int sscanf(
const char *buffer,
const char *format,
...
);
int sprintf(
char *buffer,
const char *format,
...
);

功能:类似于scanf和printf 但把字符串*buffer用于输入输出

sscanf与sprintf是处理字符串问题的利器。sscanf可以理解为string+scanf,则sprintf可以理解为string+printf

接下来看一看我写的代码:

#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
int main(){
    short k=45;
    char s[3];
    cin>>s;
    sscanf(s,"%d",&k);
    sprintf(s,"%d",k);
    cout<<s;
    return 0;
}

F11按下后(编译运行),我们输入任意3个字符,输出的是45,也就是k的值.

那么,这俩玩意儿能干啥呢?

1.sprintf用于格式化字符串 把变量打印到字符串中,从而获得数字的字符形式,这样不需要手工转换。 例如 char c[100]; int k=255; sprintf(c,"%d",k); //c包含"255"

2.sprintf用于进制转换 可以方便地得到变量的十六进制和八进制字符序列,再稍加处理即可得到每一位的值。 char c[100]; int k=255; sprintf(c,"%x",k); //c包含"ff" c[0]='f' c[1]='f'

3.sprintf用于连接字符串 方便地连接两个或者多个字符串 char buf[1024]; char a[100]="I "; char b[100]="love "; char c[100]="ACM." sprintf(buf,"%s%s%s",a,b,c); //buf 包含"I love ACM."