공대인의 널널한인생

multiU.egloos.com

방명록



문자열 뒤집기 *자료구조/알고리즘

교수님께서 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변수를 하나씩 감소시킨다.
 }
}


1 2 3 4 5 6 7 8 9 10 다음