Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語で3つの文字列を指定文字に置換し、連結して出力する方法

3つの文字列を入力し、それぞれの文字列をユーザーが指定した1文字で置き換えます。置き換え後の各文字列を表示した後、3つの文字列を連結した結果を出力します。

入力:
   文字列1 : tutorials
   文字列1の置換文字 : x
   文字列2 : points
   文字列2の置換文字 : y
   文字列3 : best
   文字列3の置換文字 : z
出力 :
   文字列1 : xxxxxxxxx
   文字列2 : yyyyyy
   文字列3 : zzzz
   連結後 : xxxxxxxxxyyyyyyzzzz

アルゴリズム

開始
ステップ1→ 文字型配列 str1、str2、str3 と、文字変数 ch1、ch2、ch3、整数変数 i を宣言する
ステップ2→ 文字列 str1、str2、str3 と、置換文字 ch1、ch2、ch3 を入力する
ステップ3→ i を 0 から strlen(str1) 未満まで 1 ずつ増やしながら繰り返す
   str1[i] = ch1 を設定
   ループ終了
ステップ4→ i を 0 から strlen(str2) 未満まで 1 ずつ増やしながら繰り返す
   str2[i] = ch2 を設定
   ループ終了
ステップ5→ i を 0 から strlen(str3) 未満まで 1 ずつ増やしながら繰り返す
   str3[i] = ch3 を設定
   ループ終了
ステップ6→ 編集後の文字列 str1、str2、str3 を表示する
ステップ7→ str1 と str2 を連結し、結果を str1 に格納する
ステップ8→ str1 と str3 を連結し、結果を str1 に格納する
ステップ9→ 連結後の文字列を表示する
終了

サンプルコード

#include<stdio.h>
#include<string.h>
int main() {
   char str1[1000],str2[1000],str3[1000],ch1,ch2,ch3;
   int i;
   printf("\nenter a string : ");
   scanf("%s\n%s\n%s", &str1, &str2, &str3);
   fflush(stdin);
   printf("\nenter the character you want to replace your first, second and third string with ? ");
   scanf("%c %c %c", &ch1, &ch2, &ch3);
   for (i = 0; i < strlen(str1); i++) //文字列1をch1で置換
      str1[i]=ch1;
   for (i = 0; i < strlen(str2); i++) //文字列2をch2で置換
      str2[i]=ch2;
   for (i = 0; i < strlen(str3); i++) //文字列3をch3で置換
      str3[i]=ch3;
   printf("string 1 after replacement with %c : %s\n",ch1,str1);
   printf("string 2 after replacement with %c : %s\n",ch2,str2);
   printf("string 3 after replacement with %c : %s\n",ch3,str3);
   strcat(str1,str2); //文字列1と文字列2を連結
   strcat(str1,str3); //文字列1と文字列3を連結
   printf("string after concatenation : %s",str1);
   return 0;
}

実行結果

上記のプログラムを実行すると、以下のような出力が得られます。

enter a string : tutorials
point
best
enter the character you want to replace your first, second and third string with ?
x
y
z
string 1 after replacement with x : xxxxxxxxx
string 2 after replacement with y : yyyyy
string 3 after replacement with z : zzzz
string after concatenation : xxxxxxxxxyyyyyzzzz

コードの解説

このプログラムでは、まず scanf 関数を使って3つの文字列を入力します。続いて fflush(stdin) で入力バッファをクリアしてから、置換に使用する文字を3つ入力します。

その後、forループstrlen 関数を組み合わせて、各文字列の長さ分だけ繰り返し処理を行い、文字列内のすべての文字を指定された文字で上書きしていきます。

最後に strcat 関数を使って文字列を連結します。str1 に str2 を連結し、さらに str3 を連結することで、3つの文字列が1つにまとまります。

なお、fflush(stdin) は標準C言語では未定義の動作となるため、移植性を重視する場合は while(getchar() != '\n'); のように入力バッファをクリアする方法が推奨されます。

  1. 文字列とは何か?C言語での文字列の宣言と初期化方法を徹底解説

    C言語における文字列(string)とは、複数の文字を並べた「文字の配列」、すなわち文字の集合体のことです。C言語には文字列型という専用のデータ型が存在しないため、char型の配列として文字列を扱います。 文字列の宣言 文字列は、以下の形式で宣言します。 char 文字列名 [サイズ]; たとえば char a[50]; と記述すると、最大50文字まで格納できる文字列が定義されます。なお、終端を表すヌル文字(\0)のぶんも領域が必要なため、実際に格納できるのは「サイズ − 1」文字である点に注意しましょう。 文字列の初期化 文字列の初期化には、主に次の2つの方法があります。 1. 単一文

  2. C言語で文字列へのポインタの配列とそのアドレスを出力する方法

    まずは、C言語における「ポインタの配列」とは何かを確認しましょう。 文字列へのポインタの配列とは 各要素が、文字列の先頭アドレスを指すポインタになっている配列のことです。 宣言と初期化は次のように行います。 char *a[ ] = {"one", "two", "three"}; ここで、a[0] は文字列 one の、a[1] は two の、a[2] は three のそれぞれ先頭アドレスを指すポインタです。 イメージとしては、配列の各要素が対応する文字列の先頭番地を保持しており、その番地をたどることで文字列本体へアクセスで