C ++字符串返回错误的结果(C++ substring returning wrong resul

2019-09-23 22:30发布

我有这个字符串:

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 。 位置是正确的,什么都试过了,就是它失败的原因?

Answer 1:

std::cout << "Month: " << date.substr(4,6) << "\n";

第二个说法是错误的。 要指定,“给我的6个字符字符串,起始于位置4.”

你可能想:

std::cout << "Month: " << date.substr(4,2) << "\n";


Answer 2:

尝试这个:

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需要开始和长度作为参数。



Answer 3:

http://www.cplusplus.com/reference/string/string/substr/

串SUBSTR(为size_t POS = 0,为size_t N =非营利组织)常量;

在当前字符串对象的字符的Pos位置被用作用于子开始字符。 如果传递的位置是过去的字符串的结尾,一个out_of_range异常被抛出。

子串的长度N。 如果这个值就会使子跨越过去的当前字符串内容的末尾,只使用这些字符,直到字符串的结尾。 非营利组织是具有用于size_t类型的元件的最大可能值的静态成员的恒定值,因此,当使用此值,所有POS和所述串的端部之间的字符被用作初始化子串。

所以,你的代码中的错误是你期望的第二个参数是最后一个字符,而不是字符串的长度的位置。



文章来源: C++ substring returning wrong results
标签: c++ substring