ポインタを使用した文字列の連結

CBeginner
オンラインで実践に進む

はじめに

C 言語のプログラミングでは、2 つの文字列のベースアドレスをchar型のポインタ変数に指定し、ポインタを最初の文字列の末尾までインクリメントしてから、2 番目の文字列の文字を最初の文字列の末尾にコピーすることで、ポインタを使って 2 つの文字列を連結することができます。

この実験では、C 言語でポインタを使って 2 つの文字列を連結する方法を学びます。

新しいファイルを作成する

まず、テキストエディタを開き、~/project/ ディレクトリに main.c という名前の新しいファイルを作成します。

ヘッダーファイルをインクルードする

このステップでは、プログラムに必要なヘッダファイル stdio.hstdlib.h をインクルードします。

#include <stdio.h>
#include <stdlib.h>

main() 関数を定義する

main() 関数は、C プログラムの本体を定義するために使用されます。

int main(){
  // TODO: Write code here
  return 0;
}

変数を宣言する

このステップでは、それぞれ 100 バイトのサイズを持つ 2 つの文字配列 aabb を宣言します。

char aa[100], bb[100];

文字列の入力

このステップでは、ユーザーが 2 つの文字列 aabb の値を入力し、gets() 関数を使用してそれらを格納します。

printf("Enter the first string: ");
gets(aa);

printf("Enter the second string to be concatenated: ");
gets(bb);

文字列の連結

このステップでは、2 つの文字ポインタ ab を定義し、最初の文字列 aa に 2 番目の文字列 bb を連結し始めます。

char *a = aa;
char *b = bb;

while(*a){
  a++;
}

while(*b){
  *a = *b;
  b++;
  a++;
}
*a = '\0';
  • *a は、最初の文字列 aa の終端を指さない限り、次のメモリ位置を指します。これは while(*a) という式を使って行われます。
  • ここでは、a は最初の文字列 aa の終端に達するまで次のメモリ位置にインクリメントされます。
  • *b は、2 番目の文字列 bb の終端を指さない限り、次のメモリ位置を指します。これは while(*b) という式を使って行われます。
  • 各メモリ位置について、a には b が指す値が代入され、その後 ab の両方がインクリメントされます。これは *a = *b; b++; a++; という式を使って行われます。
  • '\0' は文字列の終端を表します。

連結した文字列を表示する

このステップでは、連結処理が完了した後に連結された文字列を表示します。

printf("\nThe string after concatenation is: %s ", aa);

コンパイルと実行

このステップでは、以下のコマンドを使用して main.c ファイルをコンパイルして実行します。

gcc main.c -o output
./output

完全なコード

以下は、ポインタを使用して文字列を連結するプログラムの完全なコードです。

#include <stdio.h>
#include <stdlib.h>

int main(){
  char aa[100], bb[100];

  printf("Enter the first string: ");
  gets(aa);

  printf("Enter the second string to be concatenated: ");
  gets(bb);

  char *a = aa;
  char *b = bb;

  while(*a){
    a++;
  }

  while(*b){
    *a = *b;
    b++;
    a++;
  }
  *a = '\0';

  printf("\nThe string after concatenation is: %s ", aa);

  return 0;
}

まとめ

この実験では、C プログラミング言語でポインタを使用して 2 つの文字列を連結する方法を学びました。これは、2 つの文字列のベースアドレスを文字ポインタ変数に指定し、ポインタを最初の文字列の末尾までインクリメントしてから、2 番目の文字列の文字を最初の文字列の末尾にコピーすることで行いました。コードの機能を確認するために、コンパイルして実行することを忘れないでください。