C言語で文字・文字列・文(空白を含む文字列)を読み書きするプログラム
C言語でプログラミングをしていると、「1文字」「文字列」「そして空白を含む文」の3種類の入力を受け取りたい場面があります。本記事では、これら3つの入力を受け取って、そのまま同じ内容を出力する方法を解説します。なお、文字列の最大サイズは500とします。
入力例と出力例
たとえば、入力が以下のようになっている場合を考えてみましょう。
character = 'T' string = "ProgrammingLanguage" sentence = "I love programming through C"
このとき、期待される出力は次の通りです。
Your character: T Your string: ProgrammingLanguage Your sentence: I love programming through C
解決のための手順
この問題を解くには、以下の手順に従います。
1文字を読み込むには、
scanf("%c", &character);を使用します。空白を含まない文字列を読み込むには、
scanf("%s", string);を使用します。この手順は必須ではありませんが、状況によって必要になります。プログラムによっては、次の入力を待たずに処理が進んでしまうことがあります。そのような場合は、
fflush(stdin)を使って入力バッファをクリアしましょう。空白を含む文を読み込むには、
fgets()関数を使用します。第1引数は格納先の文字列、第2引数は読み込むサイズ、第3引数はコンソール(標準入力)から受け取るための stdin を指定します。最後に、改行文字まで含めて文字列の終端として扱うことで、空白も正しく読み込めるようになります。
実装例
それでは、実際のコードを見て理解を深めましょう。
#include <stdio.h>
int main(){
char character;
char string[500];
char sentence[500];
scanf("%c", &character);
scanf("%s", string);
fflush(stdin);
fgets(sentence, 500, stdin);
printf("Your character: %c\n", character);
printf("Your string: %s\n", string);
printf("Your sentence: %s\n", sentence);
}入力
T ProgrammingLanguage I love programming through C
出力
Your character: T Your string: ProgrammingLanguage Your sentence: I love programming through C
補足:fflush(stdin)について
scanf("%c") や scanf("%s") の直後に fgets() を呼び出すと、入力バッファに残った改行文字が原因で、意図した通りに動作しないことがあります。fflush(stdin) は標準C規格では未定義動作とされていますが、多くの環境(Visual Studioなど)では入力バッファをクリアする目的で広く使われています。移植性を重視する場合は、getchar() を使って残りの文字を読み捨てる方法も検討するとよいでしょう。
-
【C#】文字列からn番目の文字を削除する方法
C#で文字列から特定の位置にある文字を削除したい場合は、Remove()メソッドを使用します。このメソッドでは、削除を開始するインデックス位置と、削除する文字数を指定できます。基本的な使い方まず、対象となる文字列を設定します。string str1 = "Amit"; Console.WriteLine("Original String: "+str1);次に、StringBuilderを作成し、4番目の位置(インデックス3)にある文字を1文字削除します。なお、C#のインデックスは0から始まるため、先頭の文字がインデックス0に相当することに注意してくださ
-
C#で文字列内の特定の文字を変更する方法
C#では、string型は不変(イミュータブル)であるため、文字列の一部を直接書き換えることはできません。そこで活躍するのが StringBuilder クラスです。StringBuilder を使えば、インデックスを指定して文字を自由に変更できます。StringBuilderの準備まず、変更対象となる文字列を StringBuilder に格納します。ここでは「pre」という文字列を使用します。StringBuilder str = new StringBuilder(); str.Append(pre);指定した位置の文字を変更する文字を変更するには、変更したいインデックスに対して新しい文