C の文字列: C で文字列変数を宣言および初期化する方法

Cの文字列とは何ですか?

A Cの文字列 は、線形シーケンス内の文字の集合にすぎません。'C' は、空白文字が含まれていても、常に文字列を単一のデータとして扱います。単一の文字は、一重引用符表現を使用して定義されます。文字列は、二重引用符を使用して表されます。

Example, "Welcome to the world of programming!"

「C」は標準ライブラリを提供するC 言語で文字列に対して複雑な操作を簡単に実行するために使用できる多くの関数が含まれています。

Cで文字列を宣言するにはどうすればよいですか?

AC String は、データ型が char である単純な配列です。 「C」言語 はデータ型として文字列を直接サポートしていません。 したがって、C で文字列を表示するには、文字配列を使用する必要があります。

C で変数を String として宣言するための一般的な構文は次のとおりです。

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言語での文字列の初期化について勉強しましょう。次の例は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 の String の名前は、基本的には配列であるため、ポインターとして機能します。

C 文字列入力: 文字列を読み取る 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 Tutorials」として入力を与えると仮定すると、XNUMX つの名前の間に空白文字が発生するため、scanf 関数は文字列全体を読み取ることはありません。 scanf 関数は読み取りのみを行います Guru99.

スペースを含む文字列を読み取るには、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() のもう XNUMX つの安全な代替手段は、指定された数の文字を読み取る 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 は、キーボードである標準入力から読み取ることを意味します。

C 文字列出力: 文字列を出力する C プログラム

標準の 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」ライブラリは、プログラム内の文字列を操作するためのさまざまな関数を提供します。 これらの関数は文字列ハンドラーとも呼ばれます。 これらのハンドラーはすべて内部に存在しますヘッダファイル。

演算 目的
strlen() この関数は、文字列の長さを調べるために使用されます。 文字列内に NULL 文字を除いた文字が何文字存在するかを返します。
strcat(str1, str2) この関数は、2 つの文字列を結合して 1 つの文字列を形成するために使用されます。 str1 を strXNUMX の末尾に追加または連結し、strXNUMX へのポインタを返します。
strcmp(str1, str2) この関数は、0 つの文字列を相互に比較するために使用されます。 str1 が str2 と等しい場合は 0 を返し、str1 < str2 の場合は 0 より小さい値を返し、str1 > str2 の場合は XNUMX より大きい値を返します。

文字列ライブラリ関数を示す以下のプログラムを考えてみましょう。

#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) : str0 の最初の n 文字が str1 の最初の n 文字と等しい場合は 2 を返し、str0 < str1 の場合は 2 より小さい値を返し、str0 > str1 の場合は 2 より大きい値を返します。
  • 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): str2 内で最初に出現した str1 へのポインタを返します。str2 が見つからない場合は NULL を返します。
  • strncat(str1, str2, n) str2 の最初の n 文字を str1 の末尾に追加 (連結) し、str1 へのポインターを返します。
  • strlwr() :文字列を小文字に変換します
  • strpr() :文字列を大文字に変換します
  • 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 を同等の long 整数値に変換します。最初の文字が数字でない場合、または数字が検出されない場合は 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 で文字列の配列を定義することで、さまざまな文字列を操作できます。