【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

参考文献

marycore.jp