我有这个字符串:
std::string date = "20121020";
我正在做:
std::cout << "** Date: " << date << "\n";
std::cout << "Year: " << date.substr(0,4) << "\n";
std::cout << "Month: " << date.substr(4,6) << "\n";
std::cout << "Day: " << date.substr(6,8) << "\n";
但即时得到:
** Date: 20121020
Year: 2012
Month: 1020
Day: 20
请注意,一个月应该是10
,而不是1020
。 位置是正确的,什么都试过了,就是它失败的原因?
std::cout << "Month: " << date.substr(4,6) << "\n";
第二个说法是错误的。 要指定,“给我的6个字符字符串,起始于位置4.”
你可能想:
std::cout << "Month: " << date.substr(4,2) << "\n";
尝试这个:
std::cout << "** Date: " << date << "\n";
std::cout << "Year: " << date.substr(0,4) << "\n";
std::cout << "Month: " << date.substr(4,2) << "\n";
std::cout << "Day: " << date.substr(6,2) << "\n";
我相信SUBSTR需要开始和长度作为参数。
http://www.cplusplus.com/reference/string/string/substr/
串SUBSTR(为size_t POS = 0,为size_t N =非营利组织)常量;
在当前字符串对象的字符的Pos位置被用作用于子开始字符。 如果传递的位置是过去的字符串的结尾,一个out_of_range异常被抛出。
子串的长度N。 如果这个值就会使子跨越过去的当前字符串内容的末尾,只使用这些字符,直到字符串的结尾。 非营利组织是具有用于size_t类型的元件的最大可能值的静态成员的恒定值,因此,当使用此值,所有POS和所述串的端部之间的字符被用作初始化子串。
所以,你的代码中的错误是你期望的第二个参数是最后一个字符,而不是字符串的长度的位置。