[BOJ]10808号アルファベット数
10587 ワード
アルファベットカウントの問題<クリック!
入力:アルファベット小文字のみの単語で、長さは100を超えない. 出力:a~zの個数を高倍に分けて出力 char資料型
c++では、charは1 byte整数型変数であり、対応する文字のASCIIコード値は整数として格納される.したがってcharで整数型演算を行うことができる. stringは通常の配列のようにインデックスを用いて逐字アクセス可能である.
countの方法でその文字列のアルファベット数ごとにアクセス!
文字列の各文字とアルファベット数を比較してカウントする方法は、追加のアルファベット配列が必要で、さらに複雑になるのではないでしょうか.
->文字列の各文字に対応するアルファベット配列のインデックスにすぐにアクセスするには?=アスキーコードを使用します.(他の人の回答を参考にする2)
->charタイプが演算できることを覚えておいてください(リファレンス)
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)
すなわち、文字を入力すると、その文字のアルファベット配列の要素値をc-「a」で+1する.
例えば、c="a"の場合、0番目(97-97)のインデックス(a)にアクセスし、c="z"の場合、25番目(122-97=25)のインデックス(z)にアクセスする
基本から1つ1つやり終えてゆっくり!
問題の説明
コア原理
c++では、charは1 byte整数型変数であり、対応する文字のASCIIコード値は整数として格納される.したがってcharで整数型演算を行うことができる.
->文字列の各文字に対応するアルファベット配列のインデックスにすぐにアクセスするには?=アスキーコードを使用します.(他の人の回答を参考にする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 << ' ';
}
}
使用: for ( init-statement(optional)range-declaration : range-expression )
:範囲ベースのfor文は、各配列の要素を繰り返し、init-statation range-delcatationで宣言された変数に現在の配列要素の値を割り当てます.
:この場合、この変数は配列要素と同じデータ型である必要があります.変形が発生します.
:通常autoというキーワードでc++にこの資料型を推定させます.
#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つやり終えてゆっくり!
Reference
この問題について([BOJ]10808号アルファベット数), 我々は、より多くの情報をここで見つけました https://velog.io/@juijeong8324/BOJ-10808번-알파벳-개수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol