ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [열혈강의 C]Part2. 11장 - 1차원 배열(연습문제11-2-2)
    Development/C 2013. 8. 7. 18:56
    반응형

    [연습문제11-2-2] 사용자가 입력한 문자열을 배열에 저장한 다음, 배열 내에서 문자열을 역순으로 뒤집는다. 그리고나서 제대로 뒤집어졌는지 확인하기 위해서 문자열을 출력해 보는 프로그램을 작성해 보자.



    #include<stdio.h>

    #include<string.h>

     

    int main(void)

    {

            char arr[100];//문자열할당

            char arr2[100];//문자열복사용

            char temp;

            int size;

     

            printf("문자열을입력하세요(최대자까지입력가능) : ");

            gets(arr);  // scanf("%s",arr);

            /*

                   <scanfgets 함수 차이점>

                   scanf는 널(null)문자. , '\0'이 끝나는 기준으로 문자열을 인식하고,

                   gets는 문자행('\n')이 끝나는 기준으로 문자열을 인식하는 차이가 있습니다.

            */

           

            strcpy(arr2,arr); // 문자열 복사: 변경 전 문자열 출력 시 사용

           

     

            /*문자사이즈계산*/                                                  // while(arr[i]!='\0')

            for(int i=0;i<100;i++)                                              //             i++;          

            {                                                                   //                                   

                   if(arr[i]=='\0')                                             //

                   {                                                                                 

                           size=i;                                                             

                           printf("문자열길이: %d byte \n",size);

                           break;

                   }

                  

            }

     

            /*문자열변경*/

            for(int j=0;j<size/2;j++)  //문자열 총길이의 1/2만 반복하면 된다.

            {

                   temp=arr[j];

                   arr[j]=arr[size-j-1];

                   arr[size-j-1]=temp;

            }

            printf("변경 전 문자열: %s\n",arr2);

            printf("변경 후 문자열: %s\n",arr);

     

           

     

            return 0;

    }





    [gets함수 부가설명]

      예를들어 문자열 입력 시 "I LOVE YOU"를 입력하려고 합니다. 하지만 scanf함수는 띄어쓰기(space) 또는 행바꿈(Enter)을 할 경우 'I'밖에 인식을 하지 못합니다. 즉, 공백을 문자열로 인식하지 못합니다. 이를 보충해주기 위해 gets함수가 있는데요. 이 함수를 사용하려면 #include<string.h>를 선언 한 후 사용해야하며, 사용방법은 " gets(입력변수); " 입니다.





    [문자열 변경 부가설명]


    ex) IˇLOVEˇYOU (size : 10) 

    I

    ˇ

    L

    O

    V

    E

    ˇ

    Y

    O

    U

    \0

    쓰레기값

    쓰레기값

    쓰레기값

    arr[0] 

    arr[1]

    arr[2]

    arr[3]

    arr[4]

    arr[5]

    arr[6]

    arr[7]

    arr[8]

    arr[9]

    arr[10]

     arr[11]

     arr[…]

     arr[100] 


    for(int j=0;j<size/2;j++

    {

        ① temp=arr[j];

        ② arr[j]=arr[size-j-1];

        ③ arr[size-j-1]=temp;

    }


    j <5

    temp=arr[j] 

    arr[j]=arr[size-j-1 ]

    arr[size-j-1]=temp

     0

     temp=arr[0] 

    'I'

    arr[0]=arr[9]

    'U' 

    'I' ↔ 'U'

    UˇLOVEˇYOI

     1

      temp=arr[1]

    ˇ'

     arr[1]=arr[8]

    'O'

     'ˇ' 'O'

    UOLOVEˇYˇ

     2

      temp=arr[2]

    L'

    arr[2]=arr[7]

    'Y'

     'L' 'Y'

    UOYOVEˇLˇ

     3

     temp=arr[3] 

     'O'

     arr[3]=arr[6]

    'ˇ'

     'O' 'ˇ'

    UOYˇVEOLˇ

     4

    temp=arr[4]  

    'V'

     arr[4]=arr[5] 

    'E'

     'V' 'E'

    UOYˇVEOLˇ



    [실행결과]




      

      


    반응형

    댓글

Designed by Tistory.