Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

ライブラリ関数を使わずに文字列を反転させるCプログラムの作成方法

C言語で文字列を反転させるには、標準ライブラリ関数 strrev() を使う方法と、自前のロジックで実装する方法の2通りがあります。本記事では、まずライブラリ関数を使った基本的な方法を確認し、その後、関数に頼らずに文字列を反転させるプログラムの書き方を詳しく解説します。

strrev() 関数とは

strrev() は、文字列を逆順に並べ替えるための関数です。主な特徴は以下のとおりです。

  • 引数に渡した文字列を反転させます。
  • 反転結果は、元の文字列が格納されていた同じ配列に上書き保存されます。

構文

strrev(文字列)

strrev() を使った文字列反転の例

まずは比較のため、strrev() を使って文字列を反転させるシンプルなプログラムを見てみましょう。仕組みを理解することで、後述する自作実装との違いが明確になります。

サンプルコード

#include<stdio.h>
main (){
    char a[50];
    clrscr();
    printf("enter a string");
    gets(a);
    strrev(a);
    printf("reversed string = %s",a);
    getch();
}

実行結果

enter a string Hello
reversed string = olleH

このように、strrev() を呼び出すだけで、入力された「Hello」が一瞬で「olleH」に反転されます。

strrev() を使わずに文字列を反転させる方法

次に、ライブラリ関数を使用せず、独自のロジックで文字列を反転させるプログラムを紹介します。

基本的な考え方は「両端から中央に向かって文字を入れ替える」というものです。具体的には以下の手順で処理を行います。

  1. 文字列の長さを求め、最後の文字のインデックスを取得します。
  2. 先頭の文字と末尾の文字を一時変数(temp)を使って交換します。
  3. 左側のポインタを1つ進め、右側のポインタを1つ戻します。
  4. 左右のポインタが交差するまで(文字列の半分まで)この操作を繰り返します。

サンプルコード

#include <stdio.h>
#include <conio.h>
#include <string.h>
void main(){
    char string[20],temp;
    int i,length;
    printf("Enter String : ");
    scanf("%s",string);
    length=strlen(string)-1;
    for(i=0;i<strlen(string)/2;i++){
        temp=string[i];
        string[i]=string[length];
        string[length--]=temp;
    }
    printf("\nReverse string :%s",string);
    getch();
}

コードのポイント解説

  • length=strlen(string)-1; … 配列のインデックスは0から始まるため、末尾の文字の位置は「長さ − 1」となります。
  • for(i=0;i<strlen(string)/2;i++) … 入れ替え作業は文字列の半分だけ行えば十分です。全文字数分ループすると、せっかく反転した文字列が元に戻ってしまいます。
  • temp 変数 … 値を失わないように、一方の文字を退避させてから交換を行います。
  • string[length--] … 交換後にデクリメント演算子で末尾側の位置を1つ前に移動させています。

実行結果

Enter String : Tutorialspoint
Reverse string :tniopslairotuT

まとめ

strrev() を使えば1行で文字列を反転できますが、移植性の面で注意が必要です(strrev() は標準C規格には含まれておらず、コンパイラによっては利用できません)。そのため、両端から文字を交換していくアルゴリズムを自分で実装できることは、C言語のポインタや配列への理解を深めるうえでも非常に重要です。ぜひ本記事のコードを実際に動かして、挙動を確かめてみてください。

  1. 【C言語】strncmpライブラリ関数を使って2つの文字列を比較するプログラムの作り方

    strncmpは、C言語のヘッダーファイル「string.h」に定義されている標準ライブラリ関数の一つです。この関数を使用すると、2つの文字列を比較し、どちらの文字列が大きい(辞書順で後ろにある)のかを判定することができます。 strcmp関数(文字列比較) strcmp関数は、2つの文字列を比較するための関数です。戻り値として、両方の文字列の中で最初に一致しなかった文字同士のASCIIコードの差を返します。 構文 int strcmp(string1, string2); 差が0の場合:string1 = string2(2つの文字列は等しい) 差が正の値の場合:string1 &

  2. C言語で配列を逆順に反転させるプログラムの書き方

    配列とは、共通の名前のもとで管理される、関連性のあるデータ項目の集まりのことです。同じ型の複数の値を効率的に扱いたい場合に活用されます。配列の宣言構文C言語で配列を宣言する際の基本的な構文は以下のとおりです。データ型 配列名 [サイズ];配列の初期化配列は、宣言と同時に初期化することもできます。int a[5] = { 10,20,30,40,50};この例では、整数型の配列 a の5つの要素に、それぞれ10から50までの値が順番に格納されています。C言語で配列を逆順にする方法配列の要素を逆順に並べ替えるには、要素の入れ替え(スワップ)やコピーのテクニックを利用します。たとえば、4つの要素を持