1번 케이스
////////////
I LOVE YOU 를 입력했을때
UOY EVOL I 라고 나오는 것은 상당히 짜기 쉽습니다.
2번 케이스
/////////////
그런데
I LOVE YOU 라고 입력했을때
YOU LOVE I 라고 나오게 하는 것은
위에 만큼 짜기 쉽지가 않더군요.
제가 한 경우
1,2 번 케이스 공통
#include <stdio.h>
#include <string.h>
char Reverse(char *input)
{
char c;
int wordSize = strlen(input);
for (int i = 0; i < wordSize/2; i++)
{
c = input[i];
input[i] = input[wordSize-1 - i];
input[wordSize-1 - i] = c;
}
return *input;
}
1번 케이스 메인
int main()
{
char input[100];
printf("입력 : ");
gets_s(input, 100);
printf("출력 : ");
int arrSize = strlen(input);
Reverse(input);
printf("%s", input);
printf("\n");
return 0;
}
2번 케이스 메인
int main()
{
char input[100];
printf("입력 : ");
gets_s(input, 100);
printf("출력 : ");
int arrSize = strlen(input);
Reverse(input);
char *reverseArr = (char *)malloc(sizeof(char)*arrSize); // reverseArr 배열 동적 할당
int last = -1, current = 0;
for (int i = 0; i < arrSize;i++)
{
if (input[i]==' ')
{
if (last == -1)
{
last = 0;
}
int tempArrSize = current - last;
char *temp = (char *)malloc(sizeof(char)*tempArrSize); // temp 배열 동적 할당
for (int j = 0; j < tempArrSize; j++)
{
temp[j] = input[last + j];
}
temp[tempArrSize] = '\0';
Reverse(temp);
for (int j = 0; j < tempArrSize; j++)
{
reverseArr[last+j] = temp[j];
}
reverseArr[i] = ' ';
last = current+1;
}
else if (i == arrSize - 1)
{
int tempArrSize = current+1 - last;
char *temp = (char *)malloc(sizeof(char)*tempArrSize); // temp 배열 동적 할당
for (int j = 0; j < tempArrSize; j++)
{
temp[j] = input[last + j];
}
temp[tempArrSize] = '\0';
Reverse(temp);
for (int j = 0; j < tempArrSize; j++)
{
reverseArr[last + j] = temp[j];
}
reverseArr[arrSize] = '\0';
}
current++;
}
printf("%s\n", reverseArr);
return 0;
}
/////////////////////////
일단 되긴 합니다만, 좀 더 효율적인 방법이 있을텐데,
기억나지는 않네요..