復習:動的な文字列結合
CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 61/63。
チャレンジ
簡単テキスト処理ユーティリティを構築するために、動的な文字列結合関数を実装するC言語プログラムを作成してください。プログラムは以下の要件を満たす必要があります:
concatenateStringsという名前の関数を作成します。この関数は:str1とstr2という名前の2つのchar*パラメータを受け取ります- 動的に割り当てられた文字列を指す
char*を返します - 両方の文字列とヌル終端文字に必要な合計メモリ量を計算します
malloc()を使用して、必要な正確なメモリ量を割り当てます- メモリ割り当てが成功したかどうかを確認します(割り当てに失敗した場合は NULL を返します)
strcpy()を使用して、最初の文字列を割り当てられたメモリにコピーしますstrcat()を使用して、2番目の文字列を結果に追加します- 新しく作成された結合文字列へのポインタを返します
processTextという名前の関数を作成します。この関数は:- 3つの
char*パラメータ:word1、word2、およびseparatorを受け取ります - 動的に割り当てられた文字列を指す
char*を返します - word1 + separator + word2 という形式の結合文字列を作成します
- まず
concatenateStringsを呼び出してword1とseparatorを結合します - 次に
concatenateStringsを再度呼び出して、その結果にword2を追加します - 中間的なメモリ割り当てを適切に解放(free)します
- 最終的な結合結果を返します
- 3つの
- main 関数では:
- サイズ50の3つの文字配列
firstWord、secondWord、およびconnectorを宣言します - 入力から、最初の単語、2番目の単語、およびコネクタを表す3つの文字列を読み取ります
- これら3つの文字列を使用して
processText関数を呼び出します - 返されたポインタが NULL でないことを確認します
- 成功した場合は、次の正確な形式で結果を出力します:
Result: [concatenated_string] - メモリ割り当てに失敗した場合は、
Memory allocation failedと出力します - 結果の文字列の長さを計算し、次の正確な形式で出力します:
Length: [length] - 動的に割り当てられたメモリを解放します
- サイズ50の3つの文字配列
このチャレンジでは、動的メモリ割り当て、文字列操作関数、ポインタの戻り値、および適切なメモリ管理の習熟度をテストします。メモリ要件の計算、malloc() と free() の使用、複数の文字列関数の操作、およびメモリ割り当て失敗の処理を練習します。このチャレンジは、動的割り当てによって、関数がそのスコープを超えて存続するデータを作成して返す方法を示しています。
自分で試してみよう
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// TODO: ここに concatenateStrings 関数を記述してください
// TODO: ここに processText 関数を記述してください
int main() {
// 入力を読み込む
char firstWord[50];
char secondWord[50];
char connector[50];
scanf("%s", firstWord);
scanf("%s", secondWord);
scanf("%s", connector);
// TODO: 以下にコードを記述してください
// processText 関数を呼び出し、結果を処理する
return 0;
}