Menu
Coddy logo textTech

strcat() の使い方

CoddyのCジャーニー「論理と制御フロー」セクションの一部。レッスン 17/63。

strcpy() を使って文字列をコピーする方法を学びましたが、2つの文字列を結合したい場合はどうすればよいでしょうか?これは連結と呼ばれ、Cではこの目的のために <string.h> ライブラリの strcat() 関数が用意されています。

strcat()関数は、ある文字列の内容を別の文字列の末尾に追加します。2つの引数を受け取ります。変更される宛先文字列と、末尾に追加されるソース文字列です。

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

char greeting[20] = "Hello";
char name[] = " World";
strcat(greeting, name);  // greeting は現在 "Hello World" を含んでいます

宛先文字列には、元の内容と追加される新しい内容の両方を格納できる十分な領域があることが重要です。strcat()関数は宛先文字列内のヌル終端文字を見つけて削除し、その位置にソース文字列をコピーして、末尾に新しいヌル終端文字を追加します。

数値(int など)を文字列に連結する必要がある場合があります。strcat() は文字配列に対してのみ機能するため、まず数値を文字列に変換する必要があります。これには sprintf() を使用できます。sprintf()printf() と同じように動作しますが、画面に出力する代わりに、フォーマットされた結果を文字配列に書き込みます。sprintf()<stdio.h> の一部であり、ほとんどの C プログラムですでにインクルードされています。

int n = 42;
char numStr[20];
sprintf(numStr, "%d", n);  // numStr は現在、文字列として "42" を含んでいます

数値が numStr に文字列として格納されたら、通常どおり strcat() を使って別の文字列に追加できます。

char summary[100] = "Total people processed: ";
int n = 3;
char numStr[20];
sprintf(numStr, "%d", n);
strcat(summary, numStr);  // summary now contains "Total people processed: 3"

この関数は、個々の単語から完全な文を作成したり、ユーザー入力とあらかじめ定義されたテキストを組み合わせたりするなど、小さな部分からより長い文字列を構築するために不可欠です。

challenge icon

チャレンジ

簡単

strcat()関数を使用した文字列連結を示し、個人向けのメッセージを作成するCプログラムを作成してください。プログラムでは、次の処理を行います。

  1. 処理する人数を表す整数 n を入力から読み取る
  2. 各 person について:
    • 入力から名を読み取る
    • 入力から姓を読み取る
    • 100個の要素を持つ fullName という名前の文字配列を作成する
    • strcpy() を使用して、名を fullName にコピーする
    • strcat() を使用して、単一のスペース " " を fullName に追加する
    • strcat() を使用して、姓を fullName に追加する
    • 150個の要素を持つ greeting という名前の文字配列を作成する
    • strcpy() を使用して、"Hello, " を greeting にコピーする
    • strcat() を使用して、fullNamegreeting に追加する
    • strcat() を使用して、"! Welcome to our program." を greeting に追加する
    • 完成した greeting メッセージを出力する
  3. すべての people の処理後、summary メッセージを作成する:
    • 100個の要素を持つ summary という名前の文字配列を作成する
    • strcpy() を使用して、"Total people processed: " を summary にコピーする
    • 数値 n を string に変換し、strcat() を使用して summary に追加する
    • summary メッセージを出力する

string 関数を使用するには、<string.h> ヘッダーをインクルードすることを忘れないでください。

出力は次の形式で結果を表示してください。

Hello, [FirstName LastName]! Welcome to our program.
Hello, [FirstName LastName]! Welcome to our program.
...
Total people processed: [n]

たとえば、入力が次のとおりの場合:

2
John
Doe
Alice
Smith

出力は次のようになります。

Hello, John Doe! Welcome to our program.
Hello, Alice Smith! Welcome to our program.
Total people processed: 2

この challenge では、strcat() を使用して複数の string を連結し、strcpy() と組み合わせて初期 string を設定し、複数の構成要素から複雑な string を段階的に構築する方法についての理解を確認します。

自分で試してみよう

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

int main() {
    // 人数を読み取る
    int n;
    scanf("%d", &n);
    
    // TODO: 以下にコードを書いてください
    // 各人を処理して挨拶メッセージを作成する
    // 次にサマリーメッセージを作成して表示する
    
    return 0;
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理と制御フローのすべてのレッスン

自分で練習してみよう: Cオンラインコンパイラ