C言語学習: 12. 文字配列と文字列

1. 文字の種類

char 型の変数は 1 バイトのメモリを占有し、値の範囲は -128 ~ 127 です。

char 型は 1 バイトの整数型として理解できます。

char 型の変数は次のように割り当てて初期化できます。

char a = 97;

char b = 'a';

2. 文字配列

文字配列は基本的にシングルバイト整数のコレクションであるため、この方法で文字配列を割り当てて初期化できます。

char a[] = {97, 98, 99};

char b[] = {'h', 'e', 'l', 'l', 'o'};

プログラム例1:

#include <stdio.h>

int main()
{
	char a[] = {97, 98, 99};
	int i = 0;
	
	for(i=0; i<sizeof(a);i++)
	{
		printf("%d\n", a[i]); //按照整型输出
	}
	
	for(i=0; i<sizeof(a);i++)
	{
		printf("%c\n", a[i]); //按照字符型输出
	}
}

3. 文字列の事実

一般的な文字列では、一部の文字を二重引用符で囲みます。

ただし、 C 言語には文字列のようなデータ型はなく、文字列は文字配列を通じてのみシミュレートできます。

私たちがよく目にする文字列は単なるリテラルであり、定数としてのみ使用できます。

#define KJ    "helloworld"
printf("%s\n", KJ);
printf("%s\n", "helloworld");

私の印象では、文字列変数は存在するように見えますが、次のプログラムでそれを「証明」できます。

プログラム例 2:

#include <stdio.h>

int main()
{
	char arr[] = {'h','e','l','l','o','\0'};

	char arr1[] = "hello";

	printf("%s\n", arr);

	printf("sizeof(arr1) = %d\n", sizeof(arr1)); //数组arr1的大小应该为6,有一个隐形的\0
	printf("%s\n", arr1);
	return 0;
}

実際、いわゆる文字列変数は本質的に文字配列です。文字配列の 0 要素は文字列の終わりを表します。文字配列の要素は、必ずしも文字列の要素であるとは限りません。プログラム例 2 に示すように、arr 配列には合計 6 つの要素がありますが、表される文字列には 5 文字しかなく、\0 である必要があります。これは配列内の要素ですが、文字列を表す場合は、終わりの記号を意味します。

したがって、文字配列に \0 要素がなければ、それは単なる文字配列であることがわかります。文字配列に \0 要素があれば、この文字配列は文字列も表すことができます。

4. 文字列操作

C 言語には文字列に対する直接的な操作がありません。これに直接焦点を当てているわけではありません。つまり、間接的な操作があります。別のツール パッケージを追加する必要があります。以前は stdio.h ツール パッケージを使用していましたが、 string.h ツールキットは文字列操作を提供します。

一般的に使用される文字列ツールは次のとおりです。

strlen(s);//获取字符串s的长度

strcpy(s1, s2);//将s2中的字符复制到s1

strcat(s1, s2);//将s2追加到s1后面

strcmp(s1, s2);//比较s1和s2是否相等,相等时返回结果0

プログラム例 3: 文字列の長さを取得する

#include <stdio.h>
#include <string.h>

int main()
{
	char arr[10] = "hello";

	int size = sizeof(arr); //获取arr数组的大小,数组大小已经定义好了,就是10

	int len = strlen(arr); //获取arr字符串的长度,字符串的长度是5,只有5个字符


	printf("size = %d\n", size);

	printf("len = %d\n", len);

	return 0;
}

出力結果:

size = 10
len = 5

プログラム例 4: 文字列のコピー

#include <stdio.h>
#include <string.h>

int main()
{
	char s1[10] = "hello";

	char s2[] = "world!";

	int len = strlen(s1); //获取arr字符串的长度

	printf("s1 = %s\n", s1);
	printf("len = %d\n", len);

	strcpy(s1, s2);
	len = strlen(s1);
	printf("s1 = %s\n", s1);
	printf("len = %d\n", len);

	return 0;
}

出力結果:

s1 = hello
len = 5
s1 = world!
len = 6

プログラム例5: 文字列連結

#include <stdio.h>
#include <string.h>

int main()
{
	char s1[20] = "hello"; //这个数组空间要搞大一些,不然拼接的字符串放不下

	char s2[] = "world!";

	int len = strlen(s1); //获取arr字符串的长度

	printf("s1 = %s\n", s1);
	printf("len = %d\n", len);

	strcat(s1, s2);
	len = strlen(s1);
	printf("s1 = %s\n", s1);
	printf("len = %d\n", len);

	return 0;
}

出力結果:

s1 = hello
len = 5
s1 = helloworld!
len = 11

プログラム例 6: 文字列の比較

int main()
{
	char s1[20] = "hello";

	char s2[] = "world!";

	int len = strlen(s1); //获取arr字符串的长度

	printf("s1 = %s\n", s1);
	printf("len = %d\n", len);

	if (strcmp(s1, s2) == 0)
	{
		printf("两个字符串相等\n");
	}
	else
	{
		printf("两个字符串不相等\n");
	}

	return 0;
}

おすすめ

転載: blog.csdn.net/m0_49968063/article/details/132938956