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

C言語で文字列を交換(スワップ)する方法をわかりやすく解説

C言語では、ポインタを使わずに文字配列の要素を1文字ずつ入れ替えることで、2つの文字列を簡単に交換(スワップ)できます。本記事では、whileループを使用して文字列を交換する具体的なサンプルコードと、その仕組みについて詳しく解説します。

文字列を交換するサンプルプログラム

以下は、2つの文字列の中身を入れ替えるC言語のサンプルコードです。

#include <stdio.h>
#include <string.h>

int main() {
    char st1[] = "My 1st string";
    char st2[] = "My 2nd string";
    char swap;
    int i = 0;

    while (st1[i] != '\0') {
        swap = st1[i];
        st1[i] = st2[i];
        st2[i] = swap;
        i++;
    }

    printf("After swapping s1 : %s\n", st1);
    printf("After swapping s2 : %s\n", st2);

    return 0;
}

実行結果

このプログラムを実行すると、以下のように2つの文字列が入れ替わって出力されます。

After swapping s1 : My 2nd string
After swapping s2 : My 1st string

プログラムの解説

このプログラムでは、まずchar型の配列 st1st2 を宣言し、それぞれに文字列を格納しています。また、一時的に値を退避させるためのchar型変数 swap と、ループカウンタとして使うint型変数 i を用意しています。

その後、whileループ内で以下の処理を繰り返します。

  • st1のi番目の文字を変数swapに退避させる
  • st2のi番目の文字をst1のi番目に代入する
  • 退避しておいたswapの値をst2のi番目に代入する
  • カウンタiをインクリメントして次の文字へ進む

ループの継続条件は「st1[i] != '\0'」、つまり文字列終端のヌル文字に到達するまで処理を繰り返すというものです。これにより、文字列全体が1文字ずつ順番に入れ替えられます。

char st1[] = "My 1st string";
char st2[] = "My 2nd string";
char swap;
int i = 0;

while (st1[i] != '\0') {
    swap = st1[i];
    st1[i] = st2[i];
    st2[i] = swap;
    i++;
}

注意点

この方法で文字列を交換する場合、両方の文字列が同じ長さである必要はありませんが、短い方の文字列の長さ分だけしか入れ替わりません。上記の例では、whileループの条件がst1のヌル文字で判定しているため、st1より長い文字列がst2にあった場合、残りの部分はコピーされない点に注意しましょう。異なる長さの文字列を安全に扱いたい場合は、strcpy関数やポインタを使った方法を検討するのがおすすめです。

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

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

  2. C言語のfillpoly()関数とは?図形の塗りつぶし方法を解説

    概要C言語のグラフィックス用ヘッダーファイル「graphics.h」には、三角形、四角形、五角形、六角形などの多角形(ポリゴン)を描画し、その内部を塗りつぶすための fillpoly() 関数が用意されています。この関数は、線のみを描く drawpoly() 関数と同じ引数を受け取る点が特徴です。構文void fillpoly( int number, int *polypoints );各引数の意味は以下の通りです。number:頂点の数を n とした場合、「n + 1」個の点の数を指定します。polypoints:「n × 2」個の整数からなる配列へのポインタです。整数は2つで1組となり、