strcat() の使い方
CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 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 now contains "Hello World"連結先の文字列には、元の内容と新しく追加される内容の両方を保持するのに十分なスペースがあることが不可欠です。strcat() 関数は、連結先の文字列内のヌル終端文字を見つけて削除し、その場所にコピー元の文字列をコピーして、最後に新しいヌル終端文字を追加します。
数値(int など)を文字列に連結する必要がある場合があります。strcat() は文字配列に対してのみ機能するため、まず数値を文字列に変換する必要があります。これは 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 には "Total people processed: 3" が格納されますこの関数は、個々の単語から完全な文章を作成したり、ユーザーの入力と定義済みのテキストを組み合わせたりするなど、小さな断片からより長い文字列を構築するために不可欠です。
チャレンジ
簡単strcat() 関数を使用して文字列を連結し、パーソナライズされたメッセージを作成する C プログラムを作成してください。プログラムは以下の手順で行う必要があります:
- 処理する人数を表す整数
nを読み取ります。 - 各人について:
- 入力から名(first name)を読み取ります。
- 入力から姓(last name)を読み取ります。
- 100個の要素を持つ
fullNameという名前の文字配列を作成します。 strcpy()を使用して、名をfullNameにコピーします。strcat()を使用して、半角スペース " " をfullNameに追加します。strcat()を使用して、姓をfullNameに追加します。- 150個の要素を持つ
greetingという名前の文字配列を作成します。 strcpy()を使用して、"Hello, " をgreetingにコピーします。strcat()を使用して、fullNameをgreetingに追加します。strcat()を使用して、"! Welcome to our program." をgreetingに追加します。- 最終的な挨拶メッセージを出力します。
- 全員の処理が終わった後、サマリーメッセージを作成します:
- 100個の要素を持つ
summaryという名前の文字配列を作成します。 strcpy()を使用して、"Total people processed: " をsummaryにコピーします。- 数値
nを文字列に変換し、strcat()を使用してsummaryに追加します。 - サマリーメッセージを出力します。
- 100個の要素を持つ
文字列関数を使用するために <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このチャレンジでは、strcat() を使用して複数の文字列を連結する方法、strcpy() と組み合わせて初期文字列を設定する方法、および複数のコンポーネントから複雑な文字列を段階的に構築する方法についての理解をテストします。
自分で試してみよう
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
// 人数を読み込む
int n;
scanf("%d", &n);
// TODO: 以下にコードを記述してください
// 各人を処理し、挨拶メッセージを作成する
// その後、要約メッセージを作成して表示する
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。