应该掌握的神奇函数——sscanf的用法

概述:

sscanf的作用:从一个字符串中读进于指定格式相符的数据。利用它可以从字符串中取出整数、浮点数和字符串。
sscanf和scanf的区别:scanf是以键盘作为输入源,sscanf是以字符串作为输入源。

sscanf:

原型:

int sscanf(const char *str, const char *format,......);

说明:

sscanf()会将参数str的字符串根据参数format字符串来转换格式并格式化数据。转换后的结果存于对应的参数内。
成功则返回参数数目,失败则返回0。


举例:

1、赋值

将第一个参数的值赋给第三个参数。

#include <iostream>
using namespace std;
int main() {
	char str[10];
	//功能1:赋值 
	for(int i = 0; i < 10; i++) str[i] = '!';
	sscanf("123456", "%s", str);				
	cout << str << endl; 
	return 0;
}
输出:123456。


2、截取。%3s表示截取3位字符
#include <iostream>
using namespace std;
int main() {
	char str[10];
	for(int i = 0; i < 10; i++) str[i] = '!';
	sscanf("1234567", "%3s", str);	
	cout << str << endl; 
	return 0;
}
输出:123。


3.1、取固定区间。%[a-z]表示只取a-z区间的数(注意一定是连续的)。
#include <iostream>
using namespace std;
int main() {
	char str[10];
	for(int i = 0; i < 10 ; i++) str[i] = '!';
	sscanf("aaaAAAqqq", "%[a-z]", str); 
	cout << str << endl; 
	return 0;
}
输出:aaa。

3.2、同上,%[a-zA-Z]表示取a-z及A-Z区间的数(注意一定是连续的)。
#include <iostream>
using namespace std;
int main() {
	char str[10];
	for(int i = 0; i < 10 ; i++) str[i] = '!';
	sscanf("aaaAAAqqq", "%[a-zA-Z]", str); 
	cout << str << endl; 
	return 0;
}
输出:aaaAAAqqq。


4.1:取指定字符为止的字符串。%[^+]表示取到+号为止的字符串
#include <iostream>
using namespace std;
int main() {
	char str[10];
	for(int i = 0 ; i < 10 ;i++) str[i] = '!'; 
	sscanf("AAAaa+BBB", "%[^+]", str); 
	cout << str << endl; 
	return 0;
}
输出:AAA。

4.2:同理,%[^ ]表示取到空格为止的字符串
#include <iostream>
using namespace std;
int main() {
	char str[10];
	for(int i = 0; i < 10; i++) str[i] = '!';
	sscanf("AAA BBB", "%[^ ]", str);
	cout << str << endl; 
	return 0;
}
输出:AAA。

4.3:第三条与第四条结合,%[^a-z ]表示取到a-z任意字符为止的字符串
#include <iostream>
using namespace std;
int main() {
	char str[10];
	for(int i = 0; i < 10; i++) str[i] = '!';
	sscanf("AAAaBBB", "%[^a-z]", str);
	cout << str << endl; 
	return 0;
}
输出:AAA。


5.1:跳过某种类型的数据不读取。%*d%s表示跳过int型数据读取字符串
#include <iostream>
using namespace std;
int main() {
	char str[10];
	for(int i = 0; i < 10; i++) str[i] = '!';
	sscanf("1234ABCD", "%*d%s", str);
	cout << str << endl; 
	return 0;
}
输出:ABCD。

5.2:与第三条结合,%[*a-z]%s表示跳过a-z字符读取字符串
#include <iostream>
using namespace std;
int main() {
	char str[10];
	for(int i = 0; i < 10; i++) str[i] = '!';
	sscanf("aaaABCD", "%[*a-z]%s", str);
	cout << str << endl; 
	return 0;
}
输出:ABCD。


6、从字符串中第n个以后截取一个某类型数据。sscanf(&a[0], "%d", &v);表示从a[0]开始截取一个int型数据赋给v
#include <iostream>
using namespace std;
int main() {
	char a[10] = "11,22,33";
	int v;
	sscanf(&a[0], "%d", &v);
	cout << v << endl; 
	return 0;
}
输出:ABCD。

补充:

关于什么时候有& 什么时候不要& ?
和scanf一样,scanf("%d",&a); 和scanf("%s",str); 取地址,str就是首地址,所以不加&。


择苦而安,择做而乐,虚拟现实终究比不过真实精彩之万一。

发布了97 篇原创文章 · 获赞 104 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43899069/article/details/104868867