반응형




보통 문자열 뒤집기는 배열 전체를 뒤집는 코드가 대부분이다.


하지만 이 코드는 단어마다 뒤집어 주는 코드이다.


(배열 전체를 뒤집는 코드 또한 아래 코드를 살짝만 수정해주면 만들 수 있다.)


ex) hello world이면 배열 전체를 뒤집으면 dlrow olleh이지만


이 코드는 olleh dlrow라고 출력이 된다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
 
#include <stdio.h>
#include <string.h>
 
void reverseString(char* s);
 
int start = 0;
int end = 0;
 
int main(void)
{
  char s[1002]; 
  int num;
  int i,j;
  int len;
 
  scanf("%d",&num); // 몇번 반복할지 입력
 
  while(getchar() != '\n'){} // 버퍼 비우기 
 
  // 문자열 순서 거꾸로 뒤집기
  for(j = 0 ; j < num ; j++)
  {
    start = 0;
    end = 0;
    gets(s);
    len = strlen(s);  
     
     for(i = 0 ; i < len ; i++
     {
         if(s[i] == ' ' || i == len-1// 띄어쓰기가 있는 부분 또는 마지막 단어는 띄어쓰기가 없으니 마지막단어는 예외적으로 처리 
         {
          end = i-1;  // 띄어쓰기를 가리키는 i에서 -1을 하여 단어의 마지막 위치로 end를 설정 
          if(i == len - 1end = i;  // 마지막 단어는 예외적으로 처리한다. 
        
          reverseString(s); // 뒤집는 함수 
          start = i+1// start는 띄어쓰기 그다음 즉 다음 단어의 첫번째 위치로 설정 
         }
     }
  
    printf("%s\n", s);   // 뒤집어진 문자열 출력
  }
    
  return 0;
}
 
 
 
void reverseString(char* s) 
{
  int i;
  char temp;
  for (i = start; i <= (end + start) / 2; i++// mellon일 경우 mel까지만 봐주면 되기에 /2를 설정  
  {                                            // +start를 해준 이유는 다음 단어로 갈 시 start가 처음이라고 생각해야되니 +start 
    temp = s[i];
    s[i] = s[end - i + start];
    s[end - i + start] = temp;
  }
}
 
Crocus







위의 그림에서 보다시피 한글은 2byte이기 때문에 이 코드상에서는 지원이 되지 않는다.











반응형

'Applied > 알고리즘 문제풀이' 카테고리의 다른 글

진법 변환  (0) 2016.03.19
각 자릿수 내림차순 정렬  (0) 2016.03.01
1,2,3을 이용하여 값 구하기  (0) 2016.02.23
큰수 A+B  (0) 2016.01.25
오름차순으로 수 정렬하기  (1) 2015.12.15