読者です 読者をやめる 読者になる 読者になる

水面下の夢

競プロやイラストに興味があります.メインブログがここ.ソシャゲの話はこっち(http://ameblo.jp/0n0-yumechi/).ブログアイコンはYaQ(@8_9_00)さんから.

はじめてのC++(What is the string made of?をC++で解き直した)

C++ HackerEarth 競技プログラミング

これをC++で解き直した.

yumechi0525.hatenablog.com

先にコード貼っとく,出来はひどい,

#include <iostream>
#include <map> 
using namespace std;
 
int main()
{
    map<char, int> hash;
    
    // entry
    hash['0'] = 6;
    hash['1'] = 2;
    hash['2'] = 5;
    hash['3'] = 5;
    hash['4'] = 4;
    hash['5'] = 5;
    hash['6'] = 6;
    hash['7'] = 3;
    hash['8'] = 7;
    hash['9'] = 6;
    
    string s;
    cin >> s;
    
    int res = 0;
    for(int i = 0; i < s.length(); i++) {
    	res += hash[s[i]];
    }
    
    cout << res << endl;
    return 0;
}

とにかく,久々に描いてみたらわからないところだらけで最悪だった.(セミコロンつけることすら忘れまくってた)

まず,mapがわからないので,mapを調べてくる.
最初unordered_mapを使おうとしたが,わからなかったので,放置.覚えてたらまた調べる.
C++ ハッシュ連想配列クラス unordered_map 入門

結局普通のmapの使い方を学ぶ.
C++での動的配列(set,map)の使い方まとめ | Futurismo

stringとcharの違いと意識しなければならない事自体が久々で,非常に気持ちが悪かったのは内緒.

登録のところがかなりアホくさいが,アレで限界だった.
改善案としては配列化してしまって,回すのだろうか,ああでもマジックナンバーとしてアスキーコードがはいっていて気持ちが悪い.

    // entry
    int arr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
    for(int i = 0; i < 10; i++) {
    	hash[i + 48] = arr[i];
    }

で,次はstringの扱い方がわからないので,メソッドを探す,ここではfor文のための長さがわかるメソッドを探していた.

C++文字列(std::string)

このリンクは非常によくメソッドがまとまっているので,また活用したいと思う.


最後は完全にコンパイルの方法を忘れていたので,ここを参照.

プログラミング :: 初めての C++ :: コンパイルと実行

私のPCでは,MinGWをつかったコンパイルが可能なので,

g++ filename.cpp -o outputname

みたいなコンパイルをした.


で,テストして提出.とても大変だった.


教訓:C++のマクロを作っておいたほうが良い.探すのが大変である.

おまけ

HackerEarth用のリポジトリを作っておいた.

github.com


これからC++も活用していきたいと思っているので,がんばろう…
C++はやっぱり早いからね(白目)