C言語で文字列を逆順にするプログラム
C言語入門の宿題としてたまに見かけるお題です。
文字列の先頭と末尾から順に入れ替えを行っていきます。
下記のコードでは文字の入れ替えに排他的論理和演算を使っていますが、
char tmp; tmp = msg[i]; msg[i] = msg[len-1-i]; msg[len-1-i] = tmp;
のように一時記憶領域を用意する方法のほうがわかりやすいです。
コード
#include <stdio.h> #include <string.h> // 入力文字列の最大長 #define MAXSIZE (256) // 文字列msgを逆順にする関数 void reverse(char *msg, size_t maxsize) { size_t i; size_t len = strnlen_s(msg, maxsize); for (i = 0; i < len / 2; i++) { msg[i] ^= msg[len - 1 - i]; msg[len - 1 - i] ^= msg[i]; msg[i] ^= msg[len - 1 - i]; } } // 使用例 int main(void) { char buf[MAXSIZE]; printf("入力してください(%d文字まで): ", MAXSIZE); scanf_s("%s", buf, MAXSIZE); printf("入力した文字列: %s\n", buf); // 【出力例】入力した文字列: ABCDEFG reverse(buf, MAXSIZE); printf("反転した文字列: %s\n", buf); // 【出力例】反転した文字列: GFEDCBA return 0; }