띄어쓰기를 단어의 구분기준으로 하여, 문자열을 거꾸로 출력하여라.
#include <stdio.h>
#include <stdlib.h> // malloc, free
#include <string.h>
/*malloc & free*/
char* RReverse(int num); // function declaration
int main()
{
int num, i, j; // 문자열의 길이, 반복문 변수
char* str;
int right; // 단어를 scanning할 끝점 변수
printf("Enter the length : ");
scanf("%d%*c", &num); // 문자열의 길이 입력
str = RReverse(num); // 함수 불러들임
right = strlen(str); // 문자열의 길이(integer)
for(i=num; i >= 0; i--) //끝에서부터(num)
{
if ((int)str[i] == 32) // 띄어쓰기(space) " " -> 32 in ASCII(decimal) code
{
for (j = i+1; j <= right-2; j++)
// space + 1 ~ right-2까지('\n'와 배열의 시작점이 0 임을 감안 -2) print
{
printf("%c", str[j]);
}
right = i+1; // i + 1 - 2 == i -1 (space point - 1)
printf(" "); // 생략된 space를 붙여줌!
}
else if(i==0) // 시작점에 다다르면
{
for(j=0 ; j<= right-2 ; j++) // 시작점 기준(left) ~ right print
{
printf("%c", str[j]);
}
}
}
free(str); // 메모리 공간 비우기(not neccessary but preffered)
return 0;
}
char* RReverse(int num)
{
char* str = (char*)malloc(num);
/* malloc은 주소값을 반환한다. 따라서 char pointer type의 'str'선언,
malloc의 반환 타입은 void * 이며 이것은 활용가치가 없다! 따라서
use type changer (char *), 메모리 할당 길이는 num(사용자 입력)으로 한다.
*/
fputs("문자열 입력 : ",stdout);
fgets(str, num, stdin); // gets는 불안정한 함수로 인식되어 fgets를 활용
return str;
}