홈 > IT > IT정보
IT정보

C언어 함수, 포인터, 동적할당 문제풀기 4-25

3 realdragonhead 0 352 0 0

4-25. 명령어 라인 매개변수를 오름차순으로 정렬하고 이를 한 줄에 하나씩 출력하시오(명령어 제외).

<CODE>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define size 100


int main(int argc, char *argv[]) {
        char * usrinput = (char *)malloc(sizeof(char)*size);
        char * command;
        char temp;
        int count=0;
        int i=0, j=0;


        if(argc == 1) {
                puts("usage: ./4-25 <command> <parameter>");
                printf("you can input %d character, as max", size-1);
                puts("");
                puts("<command list>");
                puts("--sort -s");
                return 0;
        }


        if(argc > 3) {
                puts("too many parameter");
                puts("if you want see usage: ./4-25");
                return 0;
        }


        command = argv[1];


        if(!strcmp(command, "--sort") || !strcmp(command, "-s")) {
                if(argc == 2) {
                        puts("please input parameter");
                        puts("if you want see usage");
                        return 0;
                }


                while(1) {
                        if(count == size) {
                                usrinput[count-1] = '';
                                break;
                        }
                        if(argv[2][count]=='') {
                                usrinput[count]='';
                                count++;
                                break;
                        }


                        usrinput[count]=argv[2][count];
                        count++;
                }


                i=count-2;


                while(i >= 0) {
                        while(j < i) {
                                if(usrinput[j]>usrinput[j+1]) {
                                        temp = usrinput[j];
                                        usrinput[j]=usrinput[j+1];
                                        usrinput[j+1]=temp;
                                }
                                j++;
                        }
                        j=0;
                        i--;
                }


                count=0;


                puts("<sorted result>");
                while(usrinput[count]!='') {
                        printf("%cn",usrinput[count]);
                        count++;
                }


                return 0;
        }else {
                puts("please input right command");
                puts("if you want see usage: ./4-25");
                return 0;
        }


        return 0;
}


<RESULT>

[case 1]

$ ./4-25

usage: ./4-25 <command> <parameter>

you can input 99 character, as max

<command list>

--sort -s

[case 2]

$ ./4-25 hello

please input right command

if you want see usage: ./4-25

[case 3]

$ ./4-25 -s

please input parameter

if you want see usage: ./4-25

[case 4]

$ ./4-25 --sort

please input parameter

if you want see usage: ./4-25

[case 5]

$ ./4-25 --sort 123456789

<sorted result>

1

2

3

4

5

6

7

8

9

[case 6]

$ ./4-25 --sort 987654321

<sorted result>

1

2

3

4

5

6

7

8

9

[case 7]

$ ./4-25 --sort hello

<sorted result>

e

h

l

l

o

[case 8]

$ ./4-25 --sort hello my

too many parameter

if you want see usage: ./4-25


4-25A. 4-25에서 명령어 라인 매개변수를 문자열 배열에 복사하는 루틴, 문자열 배열을 정렬하는 루틴, 문자열 배열의 값을 화면에 출력하는 루틴을 각각 함수로 작성하시오.

<CODE>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define size 100


int copystring(char *, char *);
void sortstring(char *, int);
void printstring(char *);
int main(int argc, char *argv[]) {
        char * usrinput = (char *)malloc(sizeof(char)*size);
        char * command;
        int index;


        if(argc == 1) {
                puts("usage: ./4-25 <command> <parameter>");
                printf("you can input %d character, as max", size-1);
                puts("");
                puts("<command list>");
                puts("--sort -s");
                return 0;
        }


        if(argc > 3) {
                puts("too many parameter");
                puts("if you want see usage: ./4-25");
                return 0;
        }


        command = argv[1];


        if(!strcmp(command, "--sort") || !strcmp(command, "-s")) {
                if(argc == 2) {
                        puts("please input parameter");
                        puts("if you want see usage: ./4-25");
                        return 0;
                }


                index=copystring(usrinput, argv[2])-2;


                sortstring(usrinput, index);


                puts("<sorted result>");
                printstring(usrinput);
                return 0;
        }else {
                puts("please input right command");
                puts("if you want see usage: ./4-25");
                return 0;
        }


        return 0;
}


int copystring(char * to, char * from) {
        int count=0;


        while(1) {
                if(count == size) {
                        to[count-1] = '';
                        break;
                }
                if(from[count]=='') {
                        to[count]='';
                        count++;
                        break;
                }


                to[count]=from[count];
                count++;
        }
        return count;
}


void sortstring(char * target, int length) {
        int i=length, j=0;
        char temp;
        while(i >= 0) {
                while(j < i) {
                        if(target[j]>target[j+1]) {
                                temp = target[j];
                                target[j]=target[j+1];
                                target[j+1]=temp;
                        }
                        j++;
                }
                j=0;
                i--;
        }
}


void printstring(char * input) {
        int count=0;
        while(input[count]!='') {
                printf("%cn",input[count]);
                count++;
        }
}


<RESULT>

[case 1]

$ ./4-25A

usage: ./4-25 <command> <parameter>

you can input 99 character, as max

<command list>

--sort -s

[case 2]

$ ./4-25A hello

please input right command

if you want see usage: ./4-25

[case 3]

$ ./4-25A -s

please input parameter

if you want see usage: ./4-25

[case 4]

$ ./4-25A --sort

please input parameter

if you want see usage: ./4-25

[case 5]

$ ./4-25A --sort 123456789

<sorted result>

1

2

3

4

5

6

7

8

9

[case 6]

$ ./4-25A --sort 987654321

<sorted result>

1

2

3

4

5

6

7

8

9

[case 7]

$ ./4-25A --sort hellomynameisrealdragonhead

<sorted result>

a

a

a

a

d

d

e

e

e

e

g

h

h

i

l

l

l

m

m

n

n

o

o

r

r

s

y

[case 8]

$ ./4-25A --sort hello my

too many parameter

if you want see usage: ./4-25


0 Comments
Category
State
  • 현재 접속자 50 명
  • 오늘 방문자 183 명
  • 어제 방문자 851 명
  • 최대 방문자 948 명
  • 전체 방문자 185,253 명
  • 전체 게시물 1,968 개
  • 전체 댓글수 250 개
  • 전체 회원수 114 명
Facebook Twitter GooglePlus KakaoStory KakaoTalk NaverBand
PlusFriend Chat