2016년 6월 9일 목요일

이것이 c언어다. 15장 인사말정렬

인사말을 입력받고, 사전순으로 정렬해서 출력하기.

#include <stdio.h>
#include <string.h>

void initIntro(char (*szIntro)[80], char **pIntro);
int inputIntro(char (*szIntro)[80]);
void sortIntro(char **pIntro, int nCount);
void printIntro(int mode, void *vp, int nCount);

int main(void)
{
    char szIntro[10][80]; //인사말저장배열
    char *pIntro[10]; //인사말위치저장 배열
    int nCount;

    initIntro(szIntro,pIntro);
    nCount = inputIntro(szIntro);
    sortIntro(pIntro, nCount);
    printIntro(1,pIntro,nCount);
    printIntro(0,szIntro,nCount);
    return 0;
}
void initIntro(char (*szIntro)[80], char **pIntro) // szIntro에 주소값들을 pIntro에 연결해주는 함수야.
{
    int i;
    for(i=0;i<10;i++)
    {
        pIntro[i] = szIntro[i];
    }
}
int inputIntro(char (*szIntro)[80])
{
    int nCount = 0;

    printf("enter the introduction(EXIT : end) : ");
    while(strcmp( gets(szIntro[nCount]), "end") != 0)
    {
        printf("enter the introduction(EXIT : end) : ");
        nCount++;
    }
    return nCount;
}
void sortIntro(char **pIntro, int nCount)
{
    int i, k;
    char *pTemp;

    for(i=0; i<nCount;i++)
    {
        for(k=i+1;k<nCount;k++)
        {
            if(strcmp( pIntro[i], pIntro[k]) > 0)
            {

                pTemp = pIntro[i];
                pIntro[i] = pIntro[k];
                pIntro[k] = pTemp;
            }
        }
    }
}
void printIntro(int mode, void *vp, int nCount)
{
    int i;
    if(mode == 0)
    {
        printf("#print order to inputed.\n");
        for(i=0;i<nCount;i++)
        {
            printf("%s\n",((char (*)[80])vp)[i]);
        }
        printf("\n");
    }
    else if(mode == 1)
    {
        printf("#print order to dictionary.\n");
        for(i=0;i<nCount;i++)
        {
            printf("%s\n",((char **)vp)[i]);
        }
        printf("\n");
    }
}


댓글 없음:

댓글 쓰기