Menu
Coddy logo textTech

復習:動的な文字列結合

CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 61/63。

challenge icon

チャレンジ

簡単

テキスト処理ユーティリティを構築するために、動的な文字列結合関数を実装するC言語プログラムを作成してください。プログラムは以下の要件を満たす必要があります:

  1. concatenateStrings という名前の関数を作成します。この関数は:
    • str1str2 という名前の2つの char* パラメータを受け取ります
    • 動的に割り当てられた文字列を指す char* を返します
    • 両方の文字列とヌル終端文字に必要な合計メモリ量を計算します
    • malloc() を使用して、必要な正確なメモリ量を割り当てます
    • メモリ割り当てが成功したかどうかを確認します(割り当てに失敗した場合は NULL を返します)
    • strcpy() を使用して、最初の文字列を割り当てられたメモリにコピーします
    • strcat() を使用して、2番目の文字列を結果に追加します
    • 新しく作成された結合文字列へのポインタを返します
  2. processText という名前の関数を作成します。この関数は:
    • 3つの char* パラメータ:word1word2、および separator を受け取ります
    • 動的に割り当てられた文字列を指す char* を返します
    • word1 + separator + word2 という形式の結合文字列を作成します
    • まず concatenateStrings を呼び出して word1separator を結合します
    • 次に concatenateStrings を再度呼び出して、その結果に word2 を追加します
    • 中間的なメモリ割り当てを適切に解放(free)します
    • 最終的な結合結果を返します
  3. main 関数では:
    • サイズ50の3つの文字配列 firstWordsecondWord、および connector を宣言します
    • 入力から、最初の単語、2番目の単語、およびコネクタを表す3つの文字列を読み取ります
    • これら3つの文字列を使用して processText 関数を呼び出します
    • 返されたポインタが NULL でないことを確認します
    • 成功した場合は、次の正確な形式で結果を出力します:Result: [concatenated_string]
    • メモリ割り当てに失敗した場合は、Memory allocation failed と出力します
    • 結果の文字列の長さを計算し、次の正確な形式で出力します:Length: [length]
    • 動的に割り当てられたメモリを解放します

このチャレンジでは、動的メモリ割り当て、文字列操作関数、ポインタの戻り値、および適切なメモリ管理の習熟度をテストします。メモリ要件の計算、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;
}

Logic & Flowのすべてのレッスン