반응형
보통 문자열 뒤집기는 배열 전체를 뒤집는 코드가 대부분이다.
하지만 이 코드는 단어마다 뒤집어 주는 코드이다.
(배열 전체를 뒤집는 코드 또한 아래 코드를 살짝만 수정해주면 만들 수 있다.)
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 - 1) end = 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 |