sscanf和sprintf

sscanf和sprintf

这两个函数其实是C中的函数,所以操作的是字符数组,不是string类型,当然C++也能用。

还可以用streamstring 类实现

文章学习自

博客

常见的格式串

  %% 印出百分比符号,不转换。
  %c 整数转成对应的 ASCII 字元。
  %d 整数转成十进位。
  %f 倍精确度数字转成浮点数。
  %o 整数转成八进位。
  %s 整数转成字符串。
  %x 整数转成小写十六进位。
  %X 整数转成大写十六进位。
  %n sscanf(str, “%d%n”, &dig, &n),%n表示一共转换了多少位的字符

sprintf函数

   sprintf函数原型为 int sprintf(char str, const char format, …)。作用是格式化字符串,具体功能如下所示:

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

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

  (3)连接多个字符串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main(){
char str[256] = { 0 };
int data = 1024;
//将data转换为字符串
sprintf(str,"%d",data);
//获取data的十六进制
sprintf(str,"0x%X",data);
//获取data的八进制
sprintf(str,"0%o",data);
const char *s1 = "Hello";
const char *s2 = "World";
//连接字符串s1和s2
sprintf(str,"%s %s",s1,s2);
cout<<str<<endl;
return 0;
}

sscanf函数

sscanf函数原型为int sscanf(const char str, const char format, …)。将参数str的字符串根据参数format字符串来转换并格式化数据,转换后的结果存于对应的参数内。具体功能如下:

  (1)根据格式从字符串中提取数据。如从字符串中取出整数、浮点数和字符串等。

  (2)取指定长度的字符串

  (3)取到指定字符为止的字符串

  (4)取仅包含指定字符集的字符串

  (5)取到指定字符集为止的字符串

例子:

1
2
3
4
5
6
7
8
9
int main(){
char s[15] = "123.432,432";
int n;
double f1;
int f2;
sscanf(s, "%lf,%d%n", &f1, &f2, &n);
cout<<f1<<" "<<f2<<" "<<n;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
char ch1[20],ch2[20],ch3[40],str[20];

int main()
{
while(gets(ch3))
{
if(!strlen(ch3))
break;
sscanf(ch3,"%s %s",ch1,ch2);
//...
}
}
-------------本文结束,感谢您的阅读-------------