영어로 이루어진 문자열 뒤집기
void reverseEng(char str[])
{
int length = strlen(str);
char cTemp = '\0';
for (int i = 0, j = (length - 1); i < j; i++, j--)
{
cTemp = str[i];
str[i] = str[j];
str[j] = cTemp;
}
}
첫번째와 마지막 문자부터 문자를 교환하면서 점점 중앙으로 다가간다. 만약 문자열의 길이가 홀수이면 중앙의 글자는 뒤집을 필요가 없으므로 종료. 짝수일 경우에는 교환한 인덱스가 서로 연속한 인덱스이면 종료하면 된다.
[0] 번째 인덱스와 값과 [4] 번째 인덱스값 교환
| [0] | [1] | [2] | [3] | [4] |
| 'H' | 'E' | 'L' | 'L' | 'O' |
[1] 번째 인덱스와 값과 [3] 번째 인덱스값 교환
| [0] | [1] | [2] | [3] | [4] |
| 'O' | 'E' | 'L' | 'L' | 'H' |
결과
| [0] | [1] | [2] | [3] | [4] |
| 'O' | 'L' | 'L' | 'E' | 'H' |

한글로 이루어진 문자열 뒤집기
void reverseKor(char str[])
{
int length = strlen(str);
char cTemp = '\0';
for (int i = 0, j = (length - 1); i < j; i+=2, j-=2)
{
cTemp = str[i];
str[i] = str[j - 1];
str[j - 1] = cTemp;
cTemp = str[i + 1];
str[i + 1] = str[j];
str[j] = cTemp;
}
한글은 영어와 달리 2bit로 이루어져 있고 두 인덱스 안에 하나의 한글이 저장되어 있다. 만약 [0] [1] 안에 "가"라는 값이 있을때. [1][0] 순서로 저장되면 한글이 아닌 다른 글자가 출력되므로 이를 조심해서 교환해준다.
[0]과 [8]에 인덱스의 값 교환, [1]과 [9]에 인덱스의 값 교환
| [0] | [1] | [2] | [3] | [4] | [5] | [6] | [7] | [8] | [9] |
| '안' | '녕' | '하' | '세' | '요' | |||||
[2]과 [6]에 인덱스의 값 교환, [3]과 [7]에 인덱스의 값 교환
| [0] | [1] | [2] | [3] | [4] | [5] | [6] | [7] | [8] | [9] |
| '요' | '녕' | '하' | '세' | '안' | |||||
결과
| [0] | [1] | [2] | [3] | [4] | [5] | [6] | [7] | [8] | [9] |
| '요' | '세' | '하' | '' | '안' | |||||

한글과 영어로 이루어진 문자열 뒤집기
void reverse(char str[])
{
char sTemp[MAX_STR] = "\0";
strcpy(sTemp, str);
int length = strlen(str);
int i = 0;
while (i < length)
{
if (sTemp[i] > 0)
{
str[length - i - 1] = sTemp[i];
i++;
}
else
{
str[length - i - 2] = sTemp[i];
str[length - i - 1] = sTemp[i + 1];
i += 2;
}
}
한글과 영어의 비트 차이로 인해 위와 같은 방법으로 문자를 뒤집는 방법은 복잡하다. 그래서 받은 문자열과 똑같은 임의의 문자열을 생성한다. 그리고 임의의 문자열 뒤 인덱스값부터 원래 문자열의 앞 인덱스값에 저장하는 방식으로 문자열을 뒤집는다.
str
| [0] | [1] | [2] | [3] | [4] | [5] | [6] | [7] | [8] | [9] |
| '안' | 'H' | 'L' | '녕' | 'L' | 'O' | 'N' | 'G' | ||
sTemp
| [0] | [1] | [2] | [3] | [4] | [5] | [6] | [7] | [8] | [9] |
| '안' | 'H' | 'L' | '녕' | 'L' | 'O' | 'N' | 'G' | ||
sTemp[9]의 값을 str[0]에 복사
str
| [0] | [1] | [2] | [3] | [4] | [5] | [6] | [7] | [8] | [9] |
| 'G' | '안' | 'H' | 'L' | '녕' | 'L' | 'O' | 'N' | 'G' | |
sTemp[8]의 값을 str[1]에 복사
str
| [0] | [1] | [2] | [3] | [4] | [5] | [6] | [7] | [8] | [9] |
| 'G' | 'N' | 'H' | 'L' | '녕' | 'L' | 'O' | 'N' | 'G' | |
sTemp[7]의 값을 str[2]에 복사
str
| [0] | [1] | [2] | [3] | [4] | [5] | [6] | [7] | [8] | [9] |
| 'G' | 'N' | 'O' | 'L' | '녕' | 'L' | 'O' | 'N' | 'G' | |
sTemp[6]의 값을 str[3]에 복사
str
| [0] | [1] | [2] | [3] | [4] | [5] | [6] | [7] | [8] | [9] |
| 'G' | 'N' | 'O' | 'L' | '녕' | 'L' | 'O' | 'N' | 'G' | |
sTemp[5]의 값을 str[5]에 복사, sTemp[4]의 값을 str[4]에 복사
str
| [0] | [1] | [2] | [3] | [4] | [5] | [6] | [7] | [8] | [9] |
| 'G' | 'N' | 'O' | 'L' | '녕' | 'L' | 'O' | 'N' | 'G' | |
sTemp[3]의 값을 str[6]에 복사
str
| [0] | [1] | [2] | [3] | [4] | [5] | [6] | [7] | [8] | [9] |
| 'G' | 'N' | 'O' | 'L' | '녕' | 'L' | 'O' | 'N' | 'G' | |
sTemp[2]의 값을 str[7]에 복사
str
| [0] | [1] | [2] | [3] | [4] | [5] | [6] | [7] | [8] | [9] |
| 'G' | 'N' | 'O' | 'L' | '녕' | 'L' | 'H' | 'N' | 'G' | |
sTemp[1]의 값을 str[9]에 복사, sTemp[0]의 값을 str[8]에 복사
str
| [0] | [1] | [2] | [3] | [4] | [5] | [6] | [7] | [8] | [9] |
| 'G' | 'N' | 'O' | 'L' | '녕' | 'L' | 'H' | '안' | ||

'아무거나 코딩' 카테고리의 다른 글
| [C] 10진수를 2진수 외에도 다양하게 변환해보자 (0) | 2024.04.22 |
|---|---|
| [C]10진수를 2진수로 변환해보자 (0) | 2024.04.22 |