mwultong Blog ... 프로그래밍 / 계산기

컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Wednesday, February 21, 2007

C언어] 문자열 거꾸로 뒤집기, 반전시키기; Reverse String


문자열의 앞뒤 순서를 정반대로 변환하는 것입니다. 예를 들어, "ABC"를 "CBA"로 변경합니다.

다만 현재 이 소스로는, 영문과 숫자 등의 1바이트 문자만 되고, 한글이나 한자 등 2바이트 문자는 되지 않습니다.

문자열 앞뒤 순서 정반대로 변환 예제


소스 파일명: example.cpp
#include <stdio.h>
#include <string.h>

void reverseString(char* s);


int main(void) {
  char s[] = "ABCDEF 123 apple"; // 총 16글자 (공백까지 포함하여, 16바이트)

  // 문자열 순서 거꾸로 뒤집기
  reverseString(s);



  // 뒤집어진 문자열 출력
  printf("%s\n", s);
  // 출력 결과: elppa 321 FEDCBA

  return 0;
}




void reverseString(char* s) {
  size_t size = strlen(s);
  char temp;

  for (size_t i = 0; i < size / 2; i++) {
    temp = s[i];
    s[i] = s[(size - 1) - i];
    s[(size - 1) - i] = temp;
  }
}






단어 단위로 거꾸로 뒤집어서 출력하기

#include <stdio.h>
#include <string.h>

void reverseString(char* s);


int main () {
  char s[] = "This is a test.";
  char* word;
  char* dummy = NULL;


  word = strtok_s(s, " ", &dummy); // word 에 첫 단어 This 가 들어감

  while (word != NULL) {
    reverseString(word);
    printf("%s ", word);
    word = strtok_s(NULL, " ", &dummy);
  }


  return 0;
}


void reverseString(char* s) {
  size_t size = strlen(s);
  char temp;

  for (size_t i = 0; i < size / 2; i++) {
    temp = s[i];
    s[i] = s[(size - 1) - i];
    s[(size - 1) - i] = temp;
  }
}


컴파일 후 실행 결과 (비주얼C++ 2005에서):
D:\Z>cl example.cpp && example.exe
example.cpp
sihT si a .tset
D:\Z>


참고: VC 2005 버전부터는 strtok 함수보다 안전한 strtok_s 함수를 추천하므로
strtok 함수를 사용하면 다음과 같은 경고가 나옴:

0.cpp(10) : warning C4996: 'strtok': This function or variable may be unsafe.
Consider using strtok_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
See online help for details.




이것은 위의 "단어 단위로 뒤집기" 소스와 같지만, 화면으로 곧바로 출력하지 않고, 결과를 메모리에 저장한 후, 한꺼번에 출력합니다.
따라서 이것이 더 실용성이 있습니다.

#include <stdio.h>
#include <string.h>

#define BUF_SIZE 1000

void reverseString(char* s);


int main () {
  char s[] = "This is a test.";
  char* word;
  char* dummy = NULL;

  char buf[BUF_SIZE];  // 결과 저장용 문자열을 위한 버퍼
  buf[0] = NULL;       // 초기화

  word = strtok_s(s, " ", &dummy); // word 에 첫 단어 This 가 들어감

  while (word != NULL) {
    reverseString(word);
    strcat_s(buf, BUF_SIZE, word);
    strcat_s(buf, BUF_SIZE, " ");
    word = strtok_s(NULL, " ", &dummy);
  }

  printf("%s\n", buf);

  return 0;
}


void reverseString(char* s) {
  size_t size = strlen(s);
  char temp;

  for (size_t i = 0; i < size / 2; i++) {
    temp = s[i];
    s[i] = s[(size - 1) - i];
    s[(size - 1) - i] = temp;
  }
}




▶▶ C언어] 정수 배열 순서 거꾸로 뒤집기 함수; Reverse Array (int) Function

▶▶ C언어] 문자열 배열(포인터 배열) 순서 거꾸로 뒤집기; Reverse String Array




tag: cpp
C언어 | C/C++ (Visual C++) 프로그래밍

2 Comments:
At May 11, 2014 at 8:43 AM, Blogger Unknown said...

안녕하세요ㅠㅠ 그러면혹시 This is a test를 siht si a tset로 뒤집으려면 어떻게소스코드를 입력해야하나요?ㅠㅠㅜ

 
At May 11, 2014 at 11:46 AM, Blogger mwultong said...

단어 뒤집기 소스 올렸습니다.

 

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top