【C++】文字列⇆int型の変換について
文字列からintへは単純にcastはできない
よく知られたことな気はするのですが、久々にやると悲しくなるのでメモ
失敗例
入力
5
コード
#include <iostream> int main() { int n;//,a,b; std::cin >> n ;//>> a >> b; int sum=0; for(int i=1; i<=n ; i++){ std::string str_i = std::to_string(i); for (std::string::const_iterator it = str_i.begin(); it != str_i.end(); ++it) { char num = static_cast<char>(*it); int j = static_cast<int>(num); std::cout << num << " " << j << std::endl; } } return 0; }
出力
なんか値がずれる...
1 49 2 50 3 51 4 52 5 53
成功例
コード
要するに、単純に文字列にキャストするのではなくて、- '0'
をしろってこと
#include <iostream> int main() { int n; std::cin >> n; for(int i=1; i<=n ; i++){ std::string str_i = std::to_string(i); for (std::string::const_iterator it = str_i.begin(); it != str_i.end(); ++it) { char num = static_cast<char>(*it); int j = static_cast<int>(num - '0'); std::cout << num << " " << j << std::endl; } } return 0; }
出力
1 1 2 2 3 3 4 4 5 5