もちっとメモ

もちっとメモ

もぐりのエンジニアが日々の中で試してみたことを気が向いたときに書き連ねていきます

C++で文字列⇔数字の変換

友人に聞かれて10桁の数字の列を逆ピラミッド式に足していったときに最後に得られる数字の1桁目を答えるという問題を解いてみました.
http://1fxfx.jugem.jp/?eid=190&guid=ON&view=mobile&tid=1 ←こんな感じの

そのときに始めに与えられる数字が0から始まる際はどうしてもint型などの数字では扱えず文字列として入力して,計算するときに数字に変換する必要がありました.
具体的には
・string型⇔int型
・char型⇔int型
です.
string→intは便利な関数があるみたいですね.
【C++】string型を数値型に変換する方法【string to int/double等々】 | MaryCore

問題はchar→intでした.
このchar型というのはASCIIコードに基づいて文字を数字と対応づけています.
ASCII文字コード : IT用語辞典
そのため,単純にint型にキャストすると,以下のような場合,

    
        char hoge = "0";
        int ans = (int)hoge + 2;
        printf("%d",ans);
    

50という出力が返ってきます.
これは,'0'はASCIIコードでは48に対応しているためです.
そこで,char→intで変換するときは,基準を'0'までずらせばいいわけです.つまり,

    
        char hoge = "0";
        int ans = (int)(hoge - '0' ) + 2;
        printf("%d",ans);
    

とすれば,ちゃんと2という出力が返ってきます.
これに気付くまで1時間はかかりました.知ってれば一瞬なんでしょうけど,独学だときづくまでに時間がかかりますね.

おまけ:
冒頭の問題を解くときにもう一つ必要だった課題解決.