기록장
[C++] 100개의 알파벳 랜덤 생성 후 개수 세기 (리스트, 배열, 데이터타입 형변환) 본문
- 100개의 임의의 소문자를 생성하고 문자 배열에 대입
- 배열 내의 각 문자에 대해 발생 빈도를 계산
-> 2개의 배열 필요
-> 문자를 chars[100] 배열에 저장
-> 각 문자의 발생 빈도를 counts[26]에 저장
#include <iostream>
#include <ctime>
using namespace std;
// 'a'=97 'z'=122 알파벳 26개
int main()
{
char chars[100];
int counts[26] = { 0 }; //counts에는 0=a ~ 25=z 로 설정
srand(time(0));
for (int i = 0; i < 100; i++) //100개의 소문자 알파벳 랜덤 생성, chars에 저장
{
int number = 97 + (rand() % 26); //소문자 a는 유니코드로 97이므로 97+@로 저장한다.
chars[i] = number;
}
for (int i = 0; i < 26; i++) //counts 배열을 반복
{
for (int j = 0; j < 100; j++) //chars 배열을 반복
{
if (chars[j] == i + 97) //예를 들어 i=0, j=0 반복에서 chars[0]이 97(=a)이면 counts[0](=a) 1씩 증가
counts[i]++;
}
}
int total = 0; //100개가 맞게 생성됐는지 확인용
for (int i = 0; i < 26; i++)
total += counts[i];
for (int i = 0; i < 26; i++)
cout << counts[i] << " " << static_cast<char>(i + 97) << endl; //알파벳 개수와 알파벳 출력
cout << "total is " << total;
return 0;
}
나는 counts 리스트 사이즈를 26으로 지정하고, 인덱스 0~25를 각각 a~z라고 가정했다.
counts[0]은 a, counts[1]은 b, ... counts[25]은 z
그리고 알파벳 'a'의 유니코드가 97이므로 인덱스+97=알파벳 인 점을 이용했다.
예를 들어, counts[3]의 알파벳은 3+97=100이고, 알파벳 'd'이다.
100개의 랜덤 생성 알파벳은 chars 리스트에 저장했고
중첩 for문을 이용해 각각 counts[0]~[25] 일 때 chars[0]~[99]를 반복한다.
ex. chars[]가 counts[]에 해당하는 알파벳이라면 counts[]++을 한다.
3 a
4 b
2 c
7 d
:
결과는 이런 식으로 나온다.
- static_cast<char>(99) 데이터타입 형변환 사용
- 배열의 인덱스와 유니코드의 특징 사용
- srand(time(0)) 난수 생성
'코딩 공부 > C++' 카테고리의 다른 글
[C++] 이차방정식의 해를 구하는 클래스 (0) | 2023.03.23 |
---|---|
[C++] Date클래스: time(0)으로 현재 날짜 구하기 (구조체사용 안 함) (0) | 2023.03.23 |
[C++] 객체지향과 절자지향 코드 비교 (TV 전원, 볼륨, 채널) (0) | 2023.03.19 |
[C++ 자료구조] ch2 프로그래밍 프로젝트 1번 : 다항식 클래스 테스트 프로그램 (0) | 2023.03.14 |
[C++] 배열, 복권번호가 다 입력됐는지 (0) | 2023.03.07 |