No.289 数字を全て足そう|yukicoder
No.289 数字を全て足そう - yukicoder を解きました。
私の提出は見苦しいので省略。
この問題は string で受け取った アルファベット + 整数 の文字列の中から
整数部分を取り出して総和を取る問題です。
string →int の変換は std::stoi() しか使った事がなかったのですが...
ASCIIコード(10進数表記)で数値変換出来るという事を教えて頂いたので少し学習を...。
まず、ASCIIコード対応表を参照 → ASCII文字コード : IT用語辞典
ASCIIコード(10進数表記)で 0は「48」、1は「49」...
つまり... (string) 1 (49) - (string) 0 (48) = 1 となるので、
この1を int 型に代入でstringからint 型への変換が出来るという訳ですか(なるほど)
因みにこの方法を知らなかったので自分でACしたコードでは
文字列からstringを1文字ずつ切り取り、数値判定して、
std::stoi()で数値変換後vectorに入れて総和を取るみたいな事をしていました()
#include <bits/stdc++.h> using namespace std; int main(){ cin.tie(0); ios::sync_with_stdio(false); string s; cin >> s; int res{0}; for(auto &x: s){ if(isdigit(x)){//数値判定 res += x - '0';//0はASCIIコードで「48」 } } cout << res << endl; return 0; }
↑改善コード
なんて簡素な実装なんだ...(自分でACしたコード、これの3倍は量ある...)
std::stoi() 以外の数値変換法学びです...。
#メモ
2016/05/17より range-based for が少し解ってきた