😸

[C] strrev 関数

に公開

機能

文字列を逆順に並べ替える。返り値は逆順になった元のポインタ。[1]

使用例

abcde を逆順表示する

\n は改行を表す エスケープシーケンス[2]

コード

char str[] = "abcde";
strrev(str);
printf("%s\n", str);
全文
#include <stdio.h>
#include <string.h>

// 非標準なので自前で実装例
char* strrev(char* str) {
    char *p1, *p2;
    if (!str) return NULL;
    for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2) {
        char tmp = *p1;
        *p1 = *p2;
        *p2 = tmp;
    }
    return str;
}

void main() {
    char str[] = "abcde";
    strrev(str);
    printf("%s\n", str);
}

実行結果

edcba

変数に格納した Hello, world! を逆順表示する

コード

char msg[] = "Hello, world!";
strrev(msg);
printf("%s\n", msg);
全文
#include <stdio.h>
#include <string.h>

char* strrev(char* str) {
    char *p1, *p2;
    if (!str) return NULL;
    for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2) {
        char tmp = *p1;
        *p1 = *p2;
        *p2 = tmp;
    }
    return str;
}

void main() {
    char msg[] = "Hello, world!";
    strrev(msg);
    printf("%s\n", msg);
}

実行結果

!dlrow ,olleH
脚注
  1. strrevはC言語標準ライブラリには含まれていないが、よく使われる有名な非標準関数である。逆順処理は自作する必要がある。 ↩︎

  2. 改行やタブなど、画面に表示されない制御文字のこと。 ↩︎

Discussion