メモめもメモ

環境構築やプログラミングに関するメモ

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;
}