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'); のように入力バッファをクリアする方法が推奨されます。
-
文字列とは何か?C言語での文字列の宣言と初期化方法を徹底解説
C言語における文字列(string)とは、複数の文字を並べた「文字の配列」、すなわち文字の集合体のことです。C言語には文字列型という専用のデータ型が存在しないため、char型の配列として文字列を扱います。 文字列の宣言 文字列は、以下の形式で宣言します。 char 文字列名 [サイズ]; たとえば char a[50]; と記述すると、最大50文字まで格納できる文字列が定義されます。なお、終端を表すヌル文字(\0)のぶんも領域が必要なため、実際に格納できるのは「サイズ − 1」文字である点に注意しましょう。 文字列の初期化 文字列の初期化には、主に次の2つの方法があります。 1. 単一文
-
C言語で文字列へのポインタの配列とそのアドレスを出力する方法
まずは、C言語における「ポインタの配列」とは何かを確認しましょう。 文字列へのポインタの配列とは 各要素が、文字列の先頭アドレスを指すポインタになっている配列のことです。 宣言と初期化は次のように行います。 char *a[ ] = {"one", "two", "three"}; ここで、a[0] は文字列 one の、a[1] は two の、a[2] は three のそれぞれ先頭アドレスを指すポインタです。 イメージとしては、配列の各要素が対応する文字列の先頭番地を保持しており、その番地をたどることで文字列本体へアクセスで