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

C言語で2つの文字列を入れ替える方法:strcpy()関数の使い方を解説

C言語において、2つの文字列の場所を入れ替える(スワップする)には、strcpy()関数を使用します。本記事では、文字列の基本的な扱い方から、strcpy()関数を使った文字列の入れ替えプログラムまで、サンプルコード付きでわかりやすく解説します。

文字列とは

文字列とは、文字型(char)の配列、すなわち複数の文字を集めたもののことです。C言語では、文字列は終端を示すヌル文字「'\0'」で終わる文字配列として表現されます。

文字列の宣言

文字配列は以下のように宣言します。

char stringname [size];

例えば、次のように宣言すると、最大50文字の文字列を格納できる配列が作成されます。

char string[50];

文字列の初期化

文字列の初期化には、主に2つの方法があります。

1. 文字定数を使う方法

1文字ずつ要素として指定し、最後にヌル文字「'\0'」を加えます。

char string[10] = { 'H', 'e', 'l', 'l', 'o', '\0' };

2. 文字列定数を使う方法

ダブルクォーテーションで囲んだ文字列リテラルを代入します。この場合、ヌル文字は自動的に付加されます。

char string[10] = "Hello";

文字列へのアクセス

文字列の入出力には、制御文字列 "%s" を使用します。「%s」は、ヌル文字「'\0'」に到達するまで文字列を読み書きします。

strcpy()関数とは

strcpy()関数は、コピー元(ソース)の文字列をコピー先(デスティネーション)の文字列に複製するための関数です。

使用する際の注意点として、コピー先の文字列長は、コピー元の文字列長以上である必要があります。領域が不足するとバッファオーバーフローが発生し、予期しない動作の原因となります。

strcpy()関数の構文は以下のとおりです。

strcpy(コピー先の文字列, コピー元の文字列);

引数の順序に注意が必要です。第1引数がコピー先、第2引数がコピー元です。

例えば、次のように引数の順序を間違えるとエラーになります。

char a[50];
strcpy("Hello", a);  /* 誤り:エラーになる */
strcpy(a, "Hello");  /* 正しい:a = "Hello" となる */

文字列を入れ替えるCプログラム

以下は、strcpy()関数を使用して2つの文字列を入れ替えるCプログラムです。一時的な作業用配列 s3 を介して、s1 と s2 の内容を交換しています。

#include<stdio.h>
#include<string.h>
main(){
    char s1[10], s2[10], s3[10];
    printf("Enter String 1\n");
    gets(s1);
    printf("Enter String 2\n");
    gets(s2);
    printf("Before Swapping\n");
    printf("String 1 : %s\n", s1);
    printf("String 2 : %s\n", s2);
    strcpy(s3, s1);   /* s1の内容をs3に退避 */
    strcpy(s1, s2);   /* s2の内容をs1にコピー */
    strcpy(s2, s3);   /* s3に退避した内容をs2にコピー */
    printf("After Swapping:\n");
    printf("String 1 : %s\n", s1);
    printf("String 2 : %s\n", s2);
}

実行結果

上記のプログラムを実行すると、以下のような出力が得られます。

Enter String 1
Tutorial
Enter String 2
Point
Before Swapping
String 1: Tutorial
String 2: Point
After Swapping:
String 1: Point
String 2: Tutorial

補足:gets()関数について

なお、サンプルコードで使用している gets() 関数は、バッファサイズを超える入力が可能なため危険性が高く、現在では非推奨とされています。実際の開発では、代わりに fgets() や scanf() など、安全な入力関数を使用することを推奨します。

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

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

  2. C++で2つの2進数文字列を加算するプログラムの書き方

    2つの2進数を表す文字列が与えられたとき、それらを加算した結果を求め、その結果を2進数の文字列として返すことを考えます。2進数とは、0か1のいずれかで表現される数値のことです。2進数同士を足し合わせる際には、以下のような2進数特有の加算ルールに従う必要があります。0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0(繰り上がり1)入力例str1 = {11}, str2 = {1}出力例100入力例str1 = {110}, str2 = {1}出力例111問題を解くためのアプローチ両方の文字列を末尾(最下位桁)から走査する対応する桁の2進数同士を加算する1と1を足した場合は、その桁