교수님께서 3번째 로 내주신 과제,
기본적으로 키보드로 부터 입력받아서 해도 되지만,
과제의 기본이 커맨드라인 을 통한거라,
이번에도 커맨드라인을 통해 입력받아 뒤집었습니다.
----------------------------------------------------
#include <stdio.h>
#include <string.h>
void reverse_string(char *str);
int main(int argc, char **argv)
{
char *p;
if (argc != 2)
{
printf("경로 문자열 순으로 입력하세요.\n");
return 0;
}
p = argv[1]; //포인터 p 에 argc[1] 의 주소를 저장
reverse_string(p);
printf("%s\n", p);
}
void reverse_string(char *str)
{
char swap1[512];
int i,len = strlen(str); //반복문에서 쓸 변수 i, len 변수는 strlen 함수를 써서 str의 문자열 길이를 구한다.
int j=len-1; //널값을 제외하기 위해 길이에서 -1 을 해준다 (j 변수는 swap1 배열때문에 사용한다)
sprintf(swap1, "%s", str);
printf("[길이 %d] ",len);
/*
포인터 str 변수의 문자열을 swap1 배열에 넣어준다.
따라서, swap1 배열에는 str 이 가르키는 주소의 문자열이 들어가게 된다.
*/
for(int i=0;i!=len;i++)
{
/*
포인터가 가르키고있는 str 배열 str[0] 부터 차곡차곡 바꿔치기 해준다.
즉 j변수 에는 문자열길이 만큼 들어있기 때문에,
만약 noanoa 라고 str에 입력된 경우 len변수에 6의 문자열 길이가 들어간다.
따라서 널문자는 포함하지 말아야 하기때문에 len-1 을 해서 j변수에 담아준것이다.
str[0] = swap1[5]
str[1] = swap1[4]
...
이런식으로 거꾸로된 문자를 하나하나 str배열에 처음부터 담아준다.
*/
str[i] = swap1[j];
j--; // j변수를 하나씩 감소시킨다.
}
}
