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;