홈 > IT > IT정보
IT정보

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

2 realdragonhead 0 118

4-11. 문자열 두 개를 매개변수로 입력받아서 두 번째 문자열을 첫 번째 문자열로 복사하는 함수를 for 문을 이용하여 작성하시오. main() 함수에서 이 함수를 호출하고, 결과를 출력하시오.

<CODE>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define size 50         //문자열 최대 길이 정의


void movetomove(char * , char * );      //첫번째 매개변수에 두번째 매개변수 문자열을 복사하는 함수.
void main() {
        char * usrinput  = (char *)malloc(sizeof(char)*size);   //사용자 입력 값 동적할당.
        char * target = (char *)malloc(sizeof(char)*size);      //문자열이 복사 될 메모리 동적할당.


        puts("문자열을 복사합니다. 입력한 값을 target 에 집어넣고 출력합니다.");
        printf("문자열 입력(최대 %d자까지 출력가능) : ", size-2);
        fgets(usrinput, 50, stdin);


        usrinput[strlen(usrinput)-1] = '\0';    //fgets 함수를 쓰면서 개행문자가 입력된것을 널값으로 덮는다.
        movetomove(target, usrinput);


        printf("입력한 문자열 : %s\n", usrinput);
        printf("복사된 문자열 : %s\n", target);
        free(usrinput);
        free(target);
}


void movetomove(char * outputchar, char * inputchar) {
        int count;
        for(count = 0; count < size-1; count++) {
                outputchar[count] = inputchar[count];   //for문을 이용하여 단순히 인덱스에 맞게 값 복사.
        }
}


<RESULT>

​[case1]

문자열을 복사합니다. 입력한 값을 target 에 집어넣고 출력합니다.

문자열 입력(최대 48자까지 출력가능) : i'm realdragonhead!

입력한 문자열 : i'm realdragonhead!

복사된 문자열 : i'm realdragonhead!

[case2]

문자열을 복사합니다. 입력한 값을 target 에 집어넣고 출력합니다.

문자열 입력(최대 48자까지 출력가능) : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

입력한 문자열 : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

복사된 문자열 : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa


4-11A. 4-11의 함수를 while 문을 이용하여 작성하시오.

<CODE>

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


void movetomove(char * , char * );
void main() {
        char * usrinput  = (char *)malloc(sizeof(char)*size);
        char * target = (char *)malloc(sizeof(char)*size);


        puts("문자열을 복사합니다. 입력한 값을 target 에 집어넣고 출력합니다.");
        printf("문자열 입력(최대 %d자까지 출력가능) : ", size-2);
        fgets(usrinput, 50, stdin);


        usrinput[strlen(usrinput)-1] = '\0';
        movetomove(usrinput, target);


        printf("입력한 문자열 : %s\n", usrinput);
        printf("복사된 문자열 : %s\n", target);
        free(usrinput);
        free(target);
}


void movetomove(char * inputchar, char * outputchar) {
        int count=0;
        while(count < size-1) {
                outputchar[count] = inputchar[count];
                count++;
        }
}


<RESULT>

[case1]

문자열을 복사합니다. 입력한 값을 target 에 집어넣고 출력합니다.

문자열 입력(최대 48자까지 출력가능) : i'm realdragonhead!!

입력한 문자열 : i'm realdragonhead!!

복사된 문자열 : i'm realdragonhead!!

[case2]

문자열을 복사합니다. 입력한 값을 target 에 집어넣고 출력합니다.

문자열 입력(최대 48자까지 출력가능) : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

입력한 문자열 : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

복사된 문자열 : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa


4-11B. 문자열 두 개를 매개변수로 입력받아서 두 번째 문자열의 순서를 뒤집어서 첫 번째 문자열로 복사하는 함수를 작성하시오. main() 함수에서 이 함수를 호출하고, 결과를 출력하시오.

<CODE>

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


void movetomove(char * , char * );      //값을 변경시켜주어야 하기 때문에 이중포인터 사용
void main() {
        char * usrinput  = (char *)malloc(sizeof(char)*size);
        char * target = (char *)malloc(sizeof(char)*size);
        int usrinputlength;


        puts("문자열을 뒤집어서 복사합니다. 입력한 값을 뒤집어서 target 에 집어넣고 출력합니다.");
        printf("문자열 입력(최대 %d자까지 출력가능) : ", size-1);
        fgets(usrinput, size, stdin);
        usrinputlength = strlen(usrinput);
        usrinput[usrinputlength - 1] = '\0';    //문자열 뒤집기를 편하게 하기 위해 개행문자 제거하고 널값 삽입


        movetomove(usrinput, target);
        printf("입력한 문자열 : %s\n", usrinput);
        printf("복사된 문자열 : %s\n", target);
        free(usrinput);
        free(target);
}


void movetomove(char * inputchar, char * outputchar) {
        int count;
        int inputlength = strlen(inputchar);


        for(count = 0; count < inputlength/2; count++) {        //길이의 절반 횟수만 돌려도 문자열 복사가능.
                outputchar[count] = inputchar[inputlength-count-1];
                outputchar[inputlength-count-1] = inputchar[count];
        }


        if(inputlength%2 == 1)          //문자열의 길이가 홀수 일때 위 반복문이 인덱스의 중간을 탐색하지 않으므로 따로 조건문으로 복
사.
                outputchar[inputlength/2] = inputchar[inputlength/2];


        outputchar[inputlength] == '\0';        //문자열의 끝을 알려주는 널값 삽입.
}


<RESULT>

[case1]

문자열을 뒤집어서 복사합니다. 입력한 값을 뒤집어서 target 에 집어넣고 출력합니다.

문자열 입력(최대 49자까지 출력가능) : hi~ i'm realdragonhead!

입력한 문자열 : hi~ i'm realdragonhead!

복사된 문자열 : !daehnogardlaer m'i ~ih

[case2]

문자열을 뒤집어서 복사합니다. 입력한 값을 뒤집어서 target 에 집어넣고 출력합니다.

문자열 입력(최대 49자까지 출력가능) : ?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!

입력한 문자열 : ?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

복사된 문자열 : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa?


4-11C. 문자열 두 개를 매개변수로 입력받아서 첫 번째 문자열 뒤쪽에 두 번째 문자열을 이어서 복사하는 함수를 작성하시오. main() 함수에서 이 함수를 호출하고, 결과를 출력하시오.

<CODE>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define fsize 200
#define ssize 100


void stringtogether(char * , char * );  //두개의 문자열을 합쳐주는 함수.
void main() {
        char * firststring = (char *)malloc(sizeof(char)*fsize);        //첫번째 문자열.
        char * secondstring = (char *)malloc(sizeof(char)*ssize);       //두번째 문자열.


        puts("문자열 두 개를 합쳐서 출력합니다.");
        fputs("첫번째 문자열 입력 : ", stdout);
        fgets(firststring, 50, stdin);
        fputs("두번째 문자열 입력 : ", stdout);
        fgets(secondstring, 100, stdin);


        firststring[strlen(firststring)-1] = '\0';
        secondstring[strlen(secondstring)-1] = '\0';
        stringtogether(firststring, secondstring);
        printf("결과 : %sn", firststring);
        free(firststring);
        free(secondstring);
}


void stringtogether(char * fsinput, char * ssinput) {
        strncat(fsinput, ssinput, 50);
}


<RESULT>

[case1]

문자열 두 개를 합쳐서 출력합니다.

첫번째 문자열 입력 : hi~! my name i

두번째 문자열 입력 : s realdragonhead!

결과 : hi~! my name is realdragonhead!

[case2]

문자열 두 개를 합쳐서 출력합니다.

첫번째 문자열 입력 : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

두번째 문자열 입력 : 결과 : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa


  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오스토리로 보내기
  • 네이버밴드로 보내기
  • 네이버로 보내기
  • 텀블러로 보내기
  • 핀터레스트로 보내기
0 Comments