[BOJ]10808号アルファベット数


アルファベットカウントの問題<クリック!

𕼧問題の説明

  • 入力:アルファベット小文字のみの単語で、長さは100を超えない.
  • 出力:a~zの個数を高倍に分けて出力
  • コア原理

  • char資料型
    c++では、charは1 byte整数型変数であり、対応する文字のASCIIコード値は整数として格納される.したがってcharで整数型演算を行うことができる.
  • stringは通常の配列のようにインデックスを用いて逐字アクセス可能である.
  • countの方法でその文字列のアルファベット数ごとにアクセス!
  • 文字列の各文字とアルファベット数を比較してカウントする方法は、追加のアルファベット配列が必要で、さらに複雑になるのではないでしょうか.
    ->文字列の各文字に対応するアルファベット配列のインデックスにすぐにアクセスするには?=アスキーコードを使用します.(他の人の回答を参考にする2)
    ->charタイプが演算できることを覚えておいてください(リファレンス)
  • 💻コード#コード#

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main(void) {
        ios::sync_with_stdio(0);
        cin.tie(0);
    
        string S;
        int count = 0;
        cin >> S;
    
        for (char i = 'a'; i <= 'z'; i++) {
            for (int j = 0; j < S.size(); j++) {
                if (S[j] == i) {
                    count++;
                }
            }
            cout << count << " "; // 굳이 배열로 저장하지 말고 바로 출력 
            count = 0; // 초기화 
        }
    }
    他の人の回答(出典:http://boj.kr/ece8236c02cf46aba9933f28e358b51c)
    #include <bits/stdc++.h>
    using namespace std;
    
    int main(void) {
      ios::sync_with_stdio(0);
      cin.tie(0);
      string s;
      cin >> s;
      for(char a = 'a'; a <= 'z'; a++){
        int cnt = 0;
        for(auto c : s)
          if(a == c) cnt++;
        cout << cnt << ' ';
      }
    }
    
    使用
  • Ranged-based for loops
    : for ( init-statement(optional)range-declaration : range-expression )
    :範囲ベースのfor文は、各配列の要素を繰り返し、init-statation range-delcatationで宣言された変数に現在の配列要素の値を割り当てます.
    :この場合、この変数は配列要素と同じデータ型である必要があります.変形が発生します.
    :通常autoというキーワードでc++にこの資料型を推定させます.
  • 他の人の回答2(出典:https://www.acmicpc.net/source/share/d7178d89538a42ababf4455443e60fe2)
    #include <bits/stdc++.h>
    using namespacestd;
    
    int freq[26]; // 각 문자의 등장횟수 저장 배열 
    int main(void) {
    	ios::sync_with_stdio(0);
    	cin.tie(0);
    	string s;
    	cin >> s;
    
    	for(auto c : s)
    		freq[c-'a']++; // 아스키 코드 참조!!
    	for(int i=0; i < 26; i++)
    		cout << freq[i] << ' ';
    }

  • すなわち、文字を入力すると、その文字のアルファベット配列の要素値をc-「a」で+1する.
    例えば、c="a"の場合、0番目(97-97)のインデックス(a)にアクセスし、c="z"の場合、25番目(122-97=25)のインデックス(z)にアクセスする
    基本から1つ1つやり終えてゆっくり!