6

私はこの文字列を持っています:

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。位置は正しいです。すべてを試しましたが、失敗していますか?

4

3 に答える 3

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

2 番目の引数は間違っています。「位置4から始まる6文字の部分文字列として私をください」と指定しています。

あなたはおそらく欲しい:

std::cout << "Month: " << date.substr(4,2) << "\n";
于 2012-10-10T19:39:54.040 に答える
3

これを試して:

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 は引数としてstart とlengthを取ると思います。

于 2012-10-10T19:40:35.987 に答える
-1

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

文字列 substr ( size_t pos = 0, size_t n = npos ) const;

pos 部分文字列の開始文字として使用される、現在の文字列オブジェクト内の文字の位置。渡された位置が文字列の末尾を超えている場合、out_of_range 例外がスローされます。

n 部分文字列の長さ。この値により、部分文字列が現在の文字列コンテンツの末尾を超える場合は、文字列の末尾までの文字のみが使用されます。npos は、size_t 型の要素の可能な最大値を持つ静的メンバー定数値です。したがって、この値が使用されると、pos と文字列の終わりの間のすべての文字が初期化サブ文字列として使用されます。

したがって、コードの間違いは、2 番目のパラメーターが部分文字列の長さではなく、最後の文字の位置であると予想していたことです。

于 2012-10-10T19:47:20.063 に答える