C の文字列:変数の宣言、初期化、印刷、例の方法
C の文字列とは?
C の文字列 線形シーケンス内の文字のコレクションに他なりません。 「C」は、空白が含まれていても、文字列を常に単一のデータとして扱います。単一の文字は、単一引用符表現を使用して定義されます。文字列は二重引用符を使用して表されます。
Example, "Welcome to the world of programming!"
「C」は、C の文字列に対して複雑な操作を簡単に実行するために使用できる多くの関数を含む標準ライブラリ
このチュートリアルでは、次のことを学びます-
- C で文字列を宣言して初期化する方法
- 文字列入力:文字列を読み取る
- 文字列出力:文字列を印刷/表示する
- fputs() 関数
- プット関数
- 文字列ライブラリ
- 文字列を数値に変換する
C で文字列を宣言して初期化する方法
C String は、データ型として char を持つ単純な配列です。 「C」言語は、文字列をデータ型として直接サポートしていません。したがって、C で文字列を表示するには、文字配列を使用する必要があります。
C で変数を文字列として宣言するための一般的な構文は次のとおりです。
char string_variable_name [array_size];
文字列の古典的な宣言は次のように行うことができます:
char string_name[string_length] = "string";
配列のサイズは、C の文字列変数内に格納される文字数を計算するために使用されるため、C 文字列変数を宣言するときに定義する必要があります。文字列宣言の有効な例を次に示します。
char first_name[15]; //declaration of a string variable char last_name[15];
上記の例は、配列サイズが 15 の文字列変数を表しています。これは、指定された C 文字列配列が最大 15 文字を保持できることを意味します。配列のインデックスは 0 から始まるため、0 ~ 14 の位置の文字が格納されます。 C コンパイラは、作成された文字配列に NULL 文字「\0」を自動的に追加します。
C での文字列の初期化について調べてみましょう。次の例は、C での文字列の初期化を示しています。
char first_name[15] = "ANTHONY"; char first_name[15] = {'A','N','T','H','O','N','Y','\0'}; // NULL character '\0' is required at end in this declaration char string1 [6] = "hello";/* string size = 'h'+'e'+'l'+'l'+'o'+"NULL" = 6 */ char string2 [ ] = "world"; /* string size = 'w'+'o'+'r'+'l'+'d'+"NULL" = 6 */ char string3[6] = {'h', 'e', 'l', 'l', 'o', '\0'} ; /*Declaration as set of characters ,Size 6*/
string3 では、NULL 文字を明示的に追加する必要があり、文字は単一引用符で囲みます。
「C」では、文字配列のサイズを定義せずに文字列変数を初期化することもできます。次の方法で実行できます。
char first_name[ ] = "NATHAN";
C の文字列の名前は、基本的に配列であるため、ポインターとして機能します。
文字列入力:文字列を読み取る
ユーザーに入力を求める対話型プログラムを作成する場合、C は scanf()、gets()、および fgets() 関数を提供して、ユーザーから入力されたテキスト行を検索します。
scanf() を使用して読み取る場合、配列名がポインターとして機能するため、「&」を使用せずに「%s」フォーマット指定子を使用して変数アドレスにアクセスします。例:
#include <stdio.h> int main() { char name[10]; int age; printf("Enter your first name and age: \n"); scanf("%s %d", name, &age); printf("You entered: %s %d",name,age); }
出力:
Enter your first name and age: John_Smith 48
scanf 関数の問題は、C の文字列全体を決して読み取らないことです。空白、フォーム フィード、垂直タブ、改行、またはキャリッジ リターンが発生するとすぐに、読み取りプロセスが停止します。 「Guru99 チュートリアル」と入力すると、2 つの名前の間に空白文字があるため、scanf 関数が文字列全体を読み取ることはありません。 scanf 関数は Guru99 のみを読み取ります。
スペースを含む文字列を読み取るために、gets() 関数を使用します。 Gets は空白を無視します。改行に達すると (Enter キーが押されると) 読み取りが停止します。例:
#include <stdio.h> int main() { char full_name[25]; printf("Enter your full name: "); gets(full_name); printf("My full name is %s ",full_name); return 0; }
出力:
Enter your full name: Dennis Ritchie My full name is Dennis Ritchie
gets() の別のより安全な代替手段は、指定された文字数を読み取る fgets() 関数です。例:
#include <stdio.h> int main() { char name[10]; printf("Enter your name plz: "); fgets(name, 10, stdin); printf("My name is %s ",name); return 0;}
出力:
Enter your name plz: Carlos My name is Carlos
fgets() の引数は次のとおりです:
- 文字列名
- 読む文字数
- stdin は、キーボードである標準入力から読み取ることを意味します
文字列出力:文字列を出力/表示
標準の printf 関数は、出力デバイスで C の文字列を印刷または表示するために使用されます。使用されている書式指定子は %s です
例
printf("%s", name);
文字列出力は、fputs() および printf() 関数で行われます。
fputs() 関数
fputs() には、文字列の名前と、テキストを表示する場所へのポインターが必要です。画面に出力するために、標準出力を参照する stdout を使用します。例:
#include <stdio.h> int main() {char town[40]; printf("Enter your town: "); gets(town); fputs(town, stdout); return 0;}
出力:
Enter your town: New York New York
プット関数
puts 関数は、C の文字列を出力デバイスに出力し、カーソルを最初の位置に戻すために使用されます。 puts 関数は次のように使用できます。
#include <stdio.h> int main() { char name[15]; gets(name); //reads a string puts(name); //displays a string return 0;}
この関数の構文は、他の関数よりも比較的単純です。
文字列ライブラリ
標準の「C」ライブラリには、プログラム内で文字列を操作するためのさまざまな関数が用意されています。これらの関数は、文字列ハンドラーとも呼ばれます。これらのハンドラーはすべて
文字列ライブラリ関数を示す以下のプログラムを考えてみましょう:
#include <stdio.h> #include <string.h> int main () { //string initialization char string1[15]="Hello"; char string2[15]=" World!"; char string3[15]; int val; //string comparison val= strcmp(string1,string2); if(val==0){ printf("Strings are equal\n"); } else{ printf("Strings are not equal\n"); } //string concatenation printf("Concatenated string:%s",strcat(string1,string2)); //string1 contains hello world! //string length printf("\nLength of first string:%d",strlen(string1)); printf("\nLength of second string:%d",strlen(string2)); //string copy printf("\nCopied string is:%s\n",strcpy(string3,string1)); //string1 is copied into string3 return 0; }
出力:
Strings are not equal Concatenated string:Hello World! Length of first string:12 Length of second string:7 Copied string is:Hello World!
その他の重要なライブラリ関数は次のとおりです:
- strncmp(str1, str2, n) :str1 の最初の n 文字が str2 の最初の n 文字と等しい場合は 0 を返し、str1
str2 の場合は 0 より大きい。 /li> - strncpy(str1, str2, n) この関数は、別の文字列から文字列をコピーするために使用されます。 str2 の最初の n 文字を str1 にコピーします
- strchr(str1, c):str1 で char c が最初に出現する位置へのポインタを返します。文字が見つからない場合は NULL を返します。
- strrchr(str1, c):str1 を逆方向に検索し、str1 の char c の位置へのポインターを返します。文字が見つからない場合は NULL を返します。
- strstr(str1, str2):str1 で最初に出現する str2 へのポインターを返します。str2 が見つからない場合は NULL を返します。
- strncat(str1, str2, n) str2 の最初の n 文字を str1 の末尾に追加 (連結) し、str1 へのポインタを返します。
- strlwr() :文字列を小文字に変換する
- strupr() :文字列を大文字に変換する
- strrev() :文字列を反転する
文字列を数値に変換する
C プログラミングでは、実行時エラーを防ぐために、数字の文字列を数値に変換できます。 stdio.h ライブラリには、文字列を数値に変換する次の関数が含まれています:
- int atoi(str) ASCII から整数への変換を表します。 str を同等の int 値に変換します。最初の文字が数字でない場合、または数字がない場合は 0 が返されます。
- double atof(str) ASCII から float への変換を表し、str を同等の double 値に変換します。最初の文字が数字でない場合、または数字が見つからない場合は、0.0 が返されます。
- long int atol(str) ASCII を long int に変換します。str を同等の長整数値に変換します。最初の文字が数字でない場合、または数字がない場合は 0 が返されます。
次のプログラムは、atoi() 関数を示しています:
#include <stdio.h> int main() {char *string_id[10]; int ID; printf("Enter a number: "); gets(string_id); ID = atoi(string_id); printf("you enter %d ",ID); return 0;}
出力:
Enter a number: 221348 you enter 221348
- char *string =“language” などの文字列ポインタ宣言は定数であり、変更できません。
まとめ
- 文字列は、文字配列に格納された一連の文字です。
- 文字列は、二重引用符で囲まれたテキストです。
- 「d」などの文字は文字列ではなく、単一引用符で示されます。
- 'C' は、プログラム内で文字列を操作するための標準ライブラリ関数を提供します。文字列マニピュレータは
ヘッダー ファイルに保存されます。 - 文字列は、プログラムで使用する前に宣言または初期化する必要があります。
- さまざまな入力文字列関数と出力文字列関数があり、それぞれに特徴があります。
- 関数を操作する文字列ライブラリを含めることを忘れないでください
- atoi()、atof()、atol() を使用して、文字列を数値に変換できます。これらは、プロセスのコーディングとデコードに非常に役立ちます。
- C で文字列の配列を定義することにより、さまざまな文字列を操作できます。
C言語