자료구조(5) 문제(2)_나의코드

//알파벳 개수를 입력 받아
//임의 대문자알파벳들을 저장

//한줄에 5개씩 출력

//A : 00개 B: 00개 C: 00개 G:00개 H: 00개
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int input_a();
void make_random(int su,char *pt);
int input_c();
void print_a(int su, int su1, char *pt);
void print_c(int su, char * pt);
int menu();

int main(void) {

    int quit = 0;
    while(!quit){
        int number = menu();
        switch(number){
            case 1 :
                printf("알파벳 개수를 입력 받습니다.\n");

                //총 알파벳 개수 입력
                int su = input_a();

                char * pt = (char *)malloc(su);

                srand((unsigned)time(NULL));
                // 난수 생성
                make_random(su, pt);

                break;

            case 2 :
                printf("한 줄에 출력될 개수를 입력 받습니다.\n");
                // 한 줄에 출력될 개수 입력
                int su1 = input_c();
                break;
            case 3 :
                printf("생성된 알파벳을 출력합니다.\n");
                 //대문자 출력
                print_a(su, su1, pt);
                break;
            case 4 :
                printf("알파벳을 개수별로 출력합니다. \n");
                //총 개수 출력
                print_c(su, pt);
                break;
            case 5 :
                printf("프로그램을 종료합니다.\n");
                free(pt);
                quit = 1;
                // exit(1); // 뭐가 더 좋은지 질문하기 
                break;    
            default :
                printf("1~5에 해당하는 값을 눌러주세요.\n"); 
        }
    }




    //어떤 메뉴에서 동적할당을 해줘야하나. 관건.
    //메뉴는 다 등가적인 관계아닌가 ? 그런데 이 코드는 swtich에 순서가 정해져 있지 않나 ? 그럼 안되는 것 아닌가 ?


    
    // //총 알파벳 개수 입력
    // int su = input_a();

    // char * pt = (char *)malloc(su);

    // srand((unsigned)time(NULL));
    // // 난수 생성
    // make_random(su, pt);
    return 0;
}


int menu(){

    printf("번호를 입력하세요.\n");
    printf("1. 알파벳 개수 입력\n");
    printf("2. 한 줄에 출력될 개수 입력\n");
    printf("3. 알파벳 출력\n");
    printf("4. 알파벳 개수별 출력\n");
    printf("5. 종료\n");
    
    int i;
    scanf("%d",&i);
    return i;

}

int input_a(){
    int su;
    printf("개수 입력 : ");
    scanf("%d", &su);
    return su;
}

void make_random(int su,char *pt){
    for (int i = 0; i < su; i++) {
        pt[i] = rand() % 26 + 65;
    }
}

int input_c(){
    int su1;
    printf("한 줄에 출력될 개수 입력 :");
    scanf("%d", &su1);
    return su1;
}

void print_a(int su, int su1, char *pt){
    printf("\\\\ 대문자 출력 \\\\\\ \n");
    for (int i = 0; i < su; i++) {
        printf("%-3c", pt[i]); 
        if (i % su1 == su1 - 1 || su - 1 == i) {
            printf("\n");
        }
    }
}

void print_c(int su, char * pt){
    printf("\n각 대문자 개수 출력 \n");
    int tfk = 0;
    for (char ch = 'A'; ch <= 'Z'; ch++) {
        int  cnt = 0;
        for(int i = 0; i <su; i++){
            if (pt[i] == ch) {
                cnt++;
            }
        }
        if (cnt != 0) {
            printf("%3c : %d개 " , ch, cnt); 
            tfk++;
            if (tfk % 5 == 0 || ch == 'Z') { 
                printf("\n");
            }
        }
        else if (ch == 'Z' && tfk % 5 != 0 ) { 
            printf("\n");
        }
    }
}

참고자료

kg아이티뱅크학원 (자료구조 수업)

0%