sscanf
大约 1 分钟输入输出
概念
sscanf
是 语言标准库中的一个函数,用于从字符串中按照指定格式读取数据。
它属于 <cstdio>
库,与 scanf
类似,但输入源是字符串而非标准输入。
基本语法
int sscanf(const char* str, const char* format, ...);
str
:源字符串,从中读取数据
format
:格式控制字符串,与 scanf
相同
后续参数:用于存储读取值的变量地址
返回值:成功读取的数据项个数
举几个栗子
从字符串中提取数值
char str[] = "123 45.67";
int a;
float b;
sscanf(str, "%d %f", &a, &b);
// 此时 a = 123, b = 45.67
解析格式化字符串
char str[] = "2023-04-15";
int year, month, day;
sscanf(str, "%d-%d-%d", &year, &month, &day);
// 此时 year = 2023, month = 4, day = 15
提取字符串的一部分
char str[] = "Name: XiaoYin, Age: 85";
char name[20];
int age;
sscanf(str, "Name: %[^,], Age: %d", name, &age);
// 此时 name = "XiaoYin", age = 85
读取指定长度
char str[] = "ABCDEFGHIJ";
char length[5];
sscanf(str, "%4s", length);
// 此时 length = "ABCD"
与string
相关
在 中,sscanf
是 语言风格的函数,它不能直接处理 的 std::string
对象。
要将两者配合使用,需要通过 c_str()
方法将 std::string
转换为 风格的字符串 const char*
。
string str = "123 45.67 Hello";
int a;
double b;
char c[20];
// 使用c_str()将string转换为const char*
sscanf(str.c_str(), "%d %lf %s", &a, &b, c);
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;