본문 바로가기

C언어 멘토링

C언어 멘토링 6주차 (문자열)

실습 문제

코드 작성

#include <stdio.h>
#include <string.h> //strlen 사용을 위한 헤더 파일
int main(void)
{
int i, j, max, result = 0, len;
char word[1000001];
int alphabet[26] = { 0 };//0으로 전부 초기화
int select = 0;
scanf_s("%s", &word, 1000001);
len = strlen(word); //len에 입력받은 변수 저장
for (i = 'a'; i <= 'z'; i++) //소문자 계산
{
for (j = 0; j < len; j++) //문자열 크기 만큼 실행 반복문
{
if (i == word[j]) //만약 word[j]가 소문자 a-z사이라면
alphabet[i - 'a']++; // a의 아스키 코드 값을 빼준다(a의 아스키 코드 값= 97) alphabet[26]안에 값이 되고 값을 증가시켜 알파벳 횟수를 탐색
}
}
for (i = 'A'; i <= 'Z'; i++) //대문자 계산
{
for (j = 0; j < len; j++)
{
if (i == word[j]) //만약 word[j]가 대문자 A-Z사이라면
alphabet[i - 'A']++; //A의 아스키 코드 값을 빼주면(A의 아스키 코드 값= 65) alphabet[26]안에 값이 되고 값을 증가시켜 알파벳 횟수를 탐색
}
}
max = alphabet[0]; //가장 많이 쓰인 알파벳을 찾아 저장
for (i = 1; i < 26; i++)
{
if (max < alphabet[i]) //만약 alphatbet[i]값이 max보다 크다면
{
max = alphabet[i]; //alphatbet[i]값은 가장 많이 쓰인 알파벳이다.
select = i; // 가장 많이 쓰인 알파벳 값을 selcet에 정수로 지정
}
}
for (i = 0; i < 26; i++)
{
if (max == alphabet[i]) //만약 alphabet[i]의 값이 max와 값다면
result++; //result를 증가시켜 가장 많이 쓰인 알파벳과 같은 횟수로 쓰인 알파벳이 있는지 확인한다.
}
if (result > 1)//만약 result가 2개 이상이라면 즉, 가장 많이 쓰인 알파벳이 2개 이상이라면
{
printf("?\n"); //?출력
}
else//그렇지 않다면 정수로 지정한 selcet값에 A의 아스키 코드 값을 더해 대문자로 출력
{
printf("%c", select + 'A');
}
return 0;
}
//백준에서는 scanf_s를 사용하면 컴파일 에러가 뜨니 주의할 것!

정답 확인

'C언어 멘토링' 카테고리의 다른 글

C언어 멘토링 6주차 (문자열)  (1) 2022.05.19
C언어 멘토링 5주차(배열)  (0) 2022.05.16
C언어 멘토링 5주차(배열)  (0) 2022.05.16
C언어 멘토링 5주차(배열)  (0) 2022.05.16
C언어 멘토링 4주차(함수)  (0) 2022.05.04