사용자로부터 문자열을 입력 받은 후 그 문자열에서 아래 기능들을 수행하는 프로그램을 작성하시오.
1. 자음 및 모음의 빈도 구하기
2. 공백없이 출력하기
3. 단어 중에서 가장 긴 단어와 가장 짧은 단어 찾기
4. 종료하기
1번 기능에서 모음은 a, e, i, o, u를 의미하며 3번 기능에서는 길이가 같은 단어가 여러개 있으면 모두 출력한다. 문자열을 입력받는 기능과 1-3번 기능(4번 제외)은 모두 개별 함
수로 구현해야 한다. 이때 main() 함수에 선언된 배열을 매개변수로 사용해야 하며 사용자로부터 입력받아서 배열에 저장된 값 자체는 변경해서는 안된다.
<실행 예시>
문자열을 입력하시오 : We have to go home right now!
메뉴:
1. 자음 및 모음의 빈도 구하기
2. 공백없이 출력하기
3. 단어 중에서 가장 긴 단어와 가장 짧은 단어 찾기
4. 종료하기
연산을 입력하시오: 1
-> 자음 개수: 13
-> 모음 개수: 9
메뉴:
1. 자음 및 모음의 빈도 구하기
2. 공백없이 출력하기
3. 단어 중에서 가장 긴 단어와 가장 짧은 단어 찾기
4. 종료하기
연산을 입력하시오: 2
-> Wehavetogohomerightnow!
메뉴:
1. 자음 및 모음의 빈도 구하기
2. 공백없이 출력하기
3. 단어 중에서 가장 긴 단어와 가장 짧은 단어 찾기
4. 종료하기
연산을 입력하시오: 3
-> 가장 긴 단어: right
-> 가장 짧은 단어: We to go
메뉴:
1. 자음 및 모음의 빈도 구하기
2. 공백없이 출력하기
3. 단어 중에서 가장 긴 단어와 가장 짧은 단어 찾기
4. 종료하기
연산을 입력하시오: 4
-> 프로그램 종료합니다!
#include <stdio.h>
#include <string.h>
typedef struct word { //기능3에 사용될 단어 정보 저장을 위한 구조체
int start;
int length;
}Word;
/*
함수 이름 : Consonant_Vowel
기능 : 문자열을 인자로 받아 자음과 모음의 개수를 출력한다.
인자 : char* s : 문자열 s
반환값 : 없음
작성 날짜 : 2023/05/22
작성자 : Aiden Lee
*/
void Consonant_Vowel(char* s) {
int cons = 0, vow = 0, i = 0;
while (s[i] != 0) {
if ((s[i] >= 65 && s[i] <= 90) || (s[i] >= 97 && s[i] <= 122)) {
if (s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u' || s[i] == 'A' || s[i] == 'E' || s[i] == 'I' || s[i] == 'O' || s[i] == 'U') {
vow++;
}
else {
cons++;
}
}
i++;
}
printf("-> 자음 개수: %d\n->모음 개수 : %d\n", cons, vow);
return;
}
/*
함수 이름 : RemoveBlank
기능 : 문자열을 인자로 받아 공백을 제거하여 출력한다.
인자 : char* s : 문자열 s
반환값 : 없음
작성 날짜 : 2023/05/22
작성자 : Aiden Lee
*/
void RemoveBlank(char* s) {
for (int i = 0; i < strlen(s); i++) {
if (s[i] != ' ')
printf("%c", s[i]);
}
printf("\n");
return;
}
/*
함수 이름 : Longest_Shortest
기능 : 인자로 전달받은 문자열의 단어 중 가장 짧은 단어와 긴 단어를 출력한다.
인자 : char* s : 문자열 s
반환값 : 없음
작성 날짜 : 2023/05/22
작성자 : Aiden Lee
*/
void Longest_Shortest(char* s) {
//각 단어의 정보를 구조체 배열에 저장하고 최대, 최소 길이 찾기
Word word_arr[20]; //입력받은 문자열은 20단어 이하라고 가정
int start = 0, word_index = 0;
int min_index = 0, max_index = 0, min, max;
for (int i = 0; i <= strlen(s); i++) {
if (s[i] == ' ' || s[i] == 0) {
word_arr[word_index].start = start;
if(s[i] == ' ')
word_arr[word_index].length = i - start;
else
word_arr[word_index].length = i - start - 1;
start = i + 1;
word_index++;
}
}
//단어의 길이가 저장된 구조체 배열에서 최대, 최소 찾기
for (int i = 0; i < word_index; i++) {
if (word_arr[i].length < word_arr[min_index].length)
min_index = i;
if (word_arr[i].length > word_arr[max_index].length)
max_index = i;
}
//최대, 최소 길이 단어 찾아 출력
max = word_arr[max_index].length;
min = word_arr[min_index].length;
printf("-> 가장 긴 단어 : ");
for (int i = 0; i < word_index; i++) {
if (word_arr[i].length == max) {
start = word_arr[i].start;
for (int j = 0; j < max; j++)
printf("%c", s[start + j]);
printf(" ");
}
}
printf("\n-> 가장 짧은 단어 : ");
for (int i = 0; i < word_index; i++) {
if (word_arr[i].length == min) {
start = word_arr[i].start;
for (int j = 0; j < min; j++)
printf("%c", s[start + j]);
printf(" ");
}
}
printf("\n");
return 0;
}
/*
함수 이름 : main
기능 : 사용자로부터 문자열을 입력받아 문자열에 대해 원하는 기능을 제공한다.
인자 : 없음
반환값 : 정상 종료 시 0 반환
작성 날짜 : 2023/05/22
작성자 : Aiden Lee
*/
int main(void) {
char string[50]; //입력받을 문자열은 길이 50 이하라고 가정
int option;
printf("문자열을 입력하시오 : ");
fgets(string, sizeof(string), stdin);
while(1){
printf("메뉴:\n1. 자음 및 모음의 빈도 구하기\n2. 공백없이 출력하기\n3. 단어 중에서 가장 긴 단어와 가장 짧은 단어 찾기\n4. 종료하기\n\n연산을 입력하시오 : ");
scanf("%d", &option);
switch (option)
{
case 1:
Consonant_Vowel(string);
break;
case 2:
RemoveBlank(string);
break;
case 3:
Longest_Shortest(string);
break;
case 4:
printf("->프로그램을 종료합니다.");
return 0;
default:
printf("주어진 메뉴를 선택하세요\n");
break;
}
}
return 0;
}
문자열을 입력하시오 : We have to go home right now!
메뉴:
1. 자음 및 모음의 빈도 구하기
2. 공백없이 출력하기
3. 단어 중에서 가장 긴 단어와 가장 짧은 단어 찾기
4. 종료하기
연산을 입력하시오 : 1
-> 자음 개수: 13
->모음 개수 : 9
메뉴:
1. 자음 및 모음의 빈도 구하기
2. 공백없이 출력하기
3. 단어 중에서 가장 긴 단어와 가장 짧은 단어 찾기
4. 종료하기
연산을 입력하시오 : 2
Wehavetogohomerightnow!
메뉴:
1. 자음 및 모음의 빈도 구하기
2. 공백없이 출력하기
3. 단어 중에서 가장 긴 단어와 가장 짧은 단어 찾기
4. 종료하기
연산을 입력하시오 : 3
-> 가장 긴 단어 : right
-> 가장 짧은 단어 : We to go
메뉴:
1. 자음 및 모음의 빈도 구하기
2. 공백없이 출력하기
3. 단어 중에서 가장 긴 단어와 가장 짧은 단어 찾기
4. 종료하기
연산을 입력하시오 : 4
->프로그램을 종료합니다.
문자열을 입력하시오 : Why you look sad
메뉴:
1. 자음 및 모음의 빈도 구하기
2. 공백없이 출력하기
3. 단어 중에서 가장 긴 단어와 가장 짧은 단어 찾기
4. 종료하기
연산을 입력하시오 : 1
-> 자음 개수: 8
->모음 개수 : 5
메뉴:
1. 자음 및 모음의 빈도 구하기
2. 공백없이 출력하기
3. 단어 중에서 가장 긴 단어와 가장 짧은 단어 찾기
4. 종료하기
연산을 입력하시오 : 2
Whyyoulooksad
메뉴:
1. 자음 및 모음의 빈도 구하기
2. 공백없이 출력하기
3. 단어 중에서 가장 긴 단어와 가장 짧은 단어 찾기
4. 종료하기
연산을 입력하시오 : 3
-> 가장 긴 단어 : look
-> 가장 짧은 단어 : Why you sad
메뉴:
1. 자음 및 모음의 빈도 구하기
2. 공백없이 출력하기
3. 단어 중에서 가장 긴 단어와 가장 짧은 단어 찾기
4. 종료하기
연산을 입력하시오 : 4
->프로그램을 종료합니다.