-
[열혈강의 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);
/*
<scanf와gets 함수 차이점>
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ˇI
2
temp=arr[2]
' L'
arr[2]=arr[7]
'Y'
'L'↔ 'Y'
UOYOVEˇLˇI
3
temp=arr[3]
'O'
arr[3]=arr[6]
'ˇ'
'O'↔ 'ˇ'
UOYˇVEOLˇI
4
temp=arr[4]
'V'
arr[4]=arr[5]
'E'
'V'↔ 'E'
UOYˇVEOLˇI
[실행결과]
반응형'Development > C' 카테고리의 다른 글
[열혈강의 C]Part2. 13장 - 포인터와 배열! 함께 이해하기-두번째[포인터/배열 완전정복] (0) 2013.08.23 [열혈강의 C]Part2. 13장 - 포인터와 배열! 함께 이해하기-첫번째[포인터/배열 완전정복] (4) 2013.08.22 [열혈강의 C]Part2. 12장 - 포인터의 이해(연습문제12-1-3) (0) 2013.08.09 [열혈강의 C]Part2. 12장 - 포인터의 이해(연습문제12-1-2) (0) 2013.08.09 [열혈강의 C]Part2. 11장 - 1차원 배열(연습문제11-2-3) (0) 2013.08.07 [열혈강의 C]Part2. 11장 - 1차원 배열(연습문제11-2-1) (0) 2013.08.07 [열혈강의 C]Part2. 11장 - 1차원 배열(연습문제11-1-3) (0) 2013.08.06 [열혈강의 C]Part2. 11장 - 1차원 배열(연습문제11-1-2) (0) 2013.08.01 [열혈강의 C]Part2. 11장 - 1차원 배열(연습문제11-1-1) (0) 2013.08.01 [열혈강의 C]도전프로그래밍 ONE - 문제8 (3) 2013.07.25