홈 > IT > IT정보
IT정보

C언어 함수, 포인터, 동적할당 문제풀기 4-26(작성중)

3 realdragonhead 0 169 0 0

4-26. 명령어 라인(command line)에 입력된 두 개의 정수를 더하는 함수를 작성하고, main() 함수에서 이 함수를 호출하여 결과를 출력하시오.

<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 addchar(char *, char *);
int main(int argc, char *argv[]) {
        char * usrinput = (char *)malloc(sizeof(char)*size);
        char * command;
        int addresult;
        int index;


        if(argc == 1) {
                puts("sortusage: ./4-26 <command> <parameter>");
                puts("calusage: ./4-26 <command> <parameter1> <parameter2>");
                printf("when you are sorting, you can input %d character, as max", size-1);
                puts("");
                puts("");
                puts("<command list>");
                puts("sort ascending: --sort -s");
                puts("add: --add -ad");
                return 0;
        }


        command = argv[1];


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


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


                sortstring(usrinput, index);


                puts("<sorted result>");
                printstring(usrinput);
                return 0;
        }else if(!strcmp(command, "--add") || !strcmp(command, "-ad")) {
                if(argc > 4) {
                        puts("too many parameter");
                        puts("if you want see usage: ./4-26");
                        return 0;
                }
                if(argc == 3) {
                        puts("please input another parameter");
                      puts("if you want see usage: ./4-26");
                        return 0;
                }
                if(argc == 2) {
                        puts("please input parameter");
                        puts("if you want see usage: ./4-26");
                        return 0;
                }


                addresult = addchar(argv[2], argv[3]);


                puts("<add result>");
                printf("%dn", addresult);
                return 0;
        } else {
                puts("please input right command");
                puts("if you want see usage: ./4-26");
                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++;
        }
}


int addchar(char *num1, char *num2) {
        return atoi(num1)+atoi(num2);
}


<RESULT>

[case 1]

$ ./4-26

sortusage: ./4-26 <command> <parameter>

calusage: ./4-26 <command> <parameter1> <parameter2>

when you are sorting, you can input 99 character, as max


<command list>

sort ascending: --sort -s

add: --add -ad

[case 2]

$ ./4-26 --add

please input parameter

if you want see usage: ./4-26

[case 3]

$ ./4-26 -ad

please input parameter

if you want see usage: ./4-26

[case 4]

$ ./4-26 -ad 123

please input another parameter

if you want see usage: ./4-26

[case 5]

$ ./4-26 -ad 123 123

<add result>

246


4-26A. 명령어 라인(command line)에 입력된 사칙연산을 수행하는 함수를 작성하고, main() 함수에서 이 함수를 호출하여 결과를 출력하시오.

<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 addchar(char *, char *);
int minuschar(char *, char *);
int multichar(char *, char *);
float divichar(char *, char *);
float basiccal(char *);
int main(int argc, char *argv[]) {
        char * usrinput = (char *)malloc(sizeof(char)*size);
        char * command;
        int calresult;
        float diviresult;
        int index;


        if(argc == 1) {
                puts("sort usage: ./4-26 <command> <parameter>");
                puts("cal usage: ./4-26 <command> <parameter1> <parameter2>");
                puts("basic cal usage: ./4-26 <command> <parameter>");
                printf("when you are sorting, you can input %d character, as max", size-1);
                puts("");
                puts("");
                puts("<command list>");
                puts("sort ascending: --sort -s");
                puts("add: --add -ad");
                puts("minus: --minus -mi");
                puts("multiply: --multiply -mu");
                puts("division: --division -di");
                puts("basic calculator: --basiccal -bc");
                return 0;
        }


        command = argv[1];


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


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


                sortstring(usrinput, index);


                puts("<sorted result>");
              printstring(usrinput);
                return 0;
        }else if(!strcmp(command, "--add") || !strcmp(command, "-ad")) {
                if(argc > 4) {
                        puts("too many parameter");
                        puts("if you want see usage: ./4-26");
                        return 0;
                }
                if(argc == 3) {
                        puts("please input another parameter");
                        puts("if you want see usage: ./4-26");
                        return 0;
                }
                if(argc == 2) {
                        puts("please input parameter");
                        puts("if you want see usage: ./4-26");
                        return 0;
                }


                calresult = addchar(argv[2], argv[3]);


                puts("<add result>");
                printf("%dn", calresult);
                return 0;
        }else if(!strcmp(command, "--minus") || !strcmp(command, "-mi")) {
                if(argc > 4) {
                        puts("too many parameter");
                        puts("if you want see usage: ./4-26");
                        return 0;
                }
                if(argc == 3) {
                        puts("please input another parameter");
                        puts("if you want see usage: ./4-26");
                        return 0;
                }
                if(argc == 2) {
                        puts("please input parameter");
                        puts("if you want see usage: ./4-26");
                        return 0;
                }


                calresult = minuschar(argv[2], argv[3]);


                puts("<minus result");
                printf("%dn", calresult);
                return 0;
        }else if(!strcmp(command, "--multiply") || !strcmp(command, "-mu")) {
                if(argc > 4) {
                        puts("too many parameter");
                        puts("if you want see usage: ./4-26");
                        return 0;
                }
                if(argc == 3) {
                        puts("please input another parameter");
                        puts("if you want see usage: ./4-26");
                        return 0;
               }
                if(argc == 2) {
                        puts("please input parameter");
                        puts("if you want see usage: ./4-26");
                        return 0;
                }


                calresult = multichar(argv[2], argv[3]);


                puts("<multiply result>");
                printf("%dn", calresult);
                return 0;
        }else if(!strcmp(command, "--division") || !strcmp(command, "-di")) {
                if(argc > 4) {
                        puts("too many parameter");
                        puts("if you want see usage: ./4-26");
                        return 0;
                }
                if(argc == 3) {
                        puts("please input another parameter");
                        puts("if you want see usage: ./4-26");
                        return 0;
                }
                if(argc == 2) {
                        puts("please input parameter");
                        puts("if you want see usage: ./4-26");
                        return 0;
                }


                calresult = divichar(argv[2], argv[3]);


                puts("<division result");
                printf("%fn", diviresult);
                return 0;
        }else if(!strcmp(command, "--basiccal") || !strcmp(command, "-bc")) {
                if(argc > 3) {
                        puts("too many parameter");
                        puts("if you want see usage: ./4-26");
                        return 0;
                }
                if(argc == 2) {
                        puts("please input parameter");
                        puts("if you want see usage: ./4-26");
                        return 0;
                }




        }else {
                puts("please input right command");
                puts("if you want see usage: ./4-26");
                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++;
        }
}


int addchar(char *num1, char *num2) {
        return atoi(num1)+atoi(num2);
}


int minuschar(char *num1, char *num2) {
        return atoi(num1)-atoi(num2);
}


int multichar(char *num1, char *num2) {
        return atoi(num1)*atoi(num2);
}


float divichar(char *num1, char *num2) {
        return atoi(num1)/atoi(num2);
}


<RESULT>


작성중입니다.



0 Comments
Category
State
  • 현재 접속자 43(2) 명
  • 오늘 방문자 329 명
  • 어제 방문자 709 명
  • 최대 방문자 948 명
  • 전체 방문자 148,951 명
  • 전체 게시물 1,783 개
  • 전체 댓글수 249 개
  • 전체 회원수 111 명
Facebook Twitter GooglePlus KakaoStory NaverBand