sscanf C++ 将字符串拆分为整数有时不起作用
sscanf c++ splitting string to ints sometimes doesn't work
我正在编写一个程序,该程序将日期字符串转换为三个独立的int变量:年、月、日。
int m,d,y;
sscanf("2011-03-08","%i %*[-] %i %*[-] %i",&y,&m,&d);
cout << y<<" "<<m<<" "<<" "<<d<<std::endl;
sscanf("2011-03-07","%i %*[-] %i %*[-] %i",&y,&m,&d);
cout << y<<" "<<m<<" "<<" "<<d;
如果我转换2011-03-08或2011-03-09,日期将为0,但对于2011-03-07,06,。。。今天是7点6分,。。。正如我所料。有人能解释一下吗,为什么它不适用于08或09,而且只适用于他们?
提前谢谢!
参见sscanf
i
匹配一个可选的带符号整数;下一个指针必须是指向int的指针。如果整数以0x或0x开头,则以16为基数读取,如果整数以0开头,则读取8为基数,否则读取10为基数。仅使用与基数相对应的字符。
08
将被扫描为八进制整数,因为它以0
开头。但08
不是有效的八进制整数,而07
是。如果使用%d
而不是%i
,它将按您的预期工作。
sscanf("2011-03-08","%d %*[-] %d %*[-] %d", &y, &m, &d);
或者更简单的
sscanf("2011-03-08","%d-%d-%d", &y, &m, &d);
根据你想对结果做什么,你也可以考虑strptime
strptime-将时间的字符串表示转换为时间tm结构
struct tm t;
strptime("2011-03-08, "%Y-%m-%d", &t);
问题是%i
将08
视为八进制整数,因此可能的解决方案是使用%d
,但由于这是C++,因此应该使用std::istringstream
(#include <sstream>
(:
int y,m,d;
char delimiter;
std::istringstream dateStream("2011-03-08");
dateStream >> y >> delimiter >> m >> delimiter >> d;
std::cout << y << " " << m << " " << d;
您的格式字符串错误。。。它应该只是"%4d-%02d-%02d"
检查sscanf是否也能与if (3 != sscanf(...)) { /* failed */ }
一起工作也无妨
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- 快速扫描标准以获取整数不起作用
- 虽然循环与整数不起作用
- 在 C++ 中使用 10 个随机整数的数组进行气泡排序不起作用
- 将多个整数添加到一个向量索引? 'Cout'不起作用
- 字符串下标超出范围.我不知道如何使用字符索引数组,所以我使用了(无符号整数),但它不起作用
- 无法弄清楚为什么我打印数组中每个整数位的过程不起作用
- sscanf C++ 将字符串拆分为整数有时不起作用
- 使用 std::cin.getline() 输入一个字符数组,读取整数不起作用