概述:
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就是首地址,所以不加&。