pon

日常のこととグルメなことを発信しています

文字列を反転させる方法(c言語)

今日も一人でもくもく会を開いております。中島でございます。

さて今日は「入力した文字列を反転させる」方法についてアウトプットしていこうと思う。

期待される出力

入力された文字: abcd
反転させた文字: dcba

ほんじゃやってこう

ソースコード

#include <stdio.h>

// 文字列を逆順にする
void main(){
    int len = 0;
    char temp = '\0';
    char a[5];
    char *s = &a[1];
    char *head = NULL;
    char *tail = NULL;

   

    // 操作前
    printf("文字列を入力してください:");
    scanf("%s",s);
    printf("Input: %s\n", s);
    
    // 文字列の長さを取得する
    len = 0;
    head = s;
    while(*head != '\0'){ head++; len++; }

    // 逆にする
    head = s;
    tail = &s[len-1];
    while(head != tail){
        temp = *head;
        *head = *tail;
        *tail = temp;
        
        head++;
        if(head == tail){ break; }
        tail--;
    }
    
    // 操作後
    printf("Output: %s\n", s);
   
}

ここでポイントとなるのがポインタを理解していないとこのコードは書けない。

ポインタを理解してなかったから俺はこのコードを書くのに3時間も費やしちゃったってわけ。

具体的にわからなかった部分

 head = s;
    tail = &s[len-1];
    while(head != tail){
        temp = *head;
        *head = *tail;
        *tail = temp;
        
        head++;
        if(head == tail){ break; }
        tail--;

まあ、反転するプログラムを書くことが目的なのだからここがわからないのも当然。

んで、ここで何をやっているかというと
空の文字列を一つ用意して、そのなかに反転したい文字列の先頭の文字を入れる(*head)。そしてheadとtailを入れ替える。
で、headとtailがさす文字をどんどんずらしていく。

ああ、難しかった。

一服しよ。。。。