1.文字列の保存
-
保存された文字列には終了マーク「\0」が必要です
-
文字列を格納する配列の長さは、少なくとも文字列の有効長 + 1 です。
以下のコードをよく読んで理解してください。
#include<stdio.h>
int main()
{
char str1[6] = {
'c', 'h', 'i', 'n', 'a' };
printf("%c\n", str1[5]); // 输出空字符
printf("%d\n", str1[5] == '\0'); // 判断是否含有空字符
char str2[5] = {
'c', 'h', 'i', 'n', 'a' };
printf("%c\n", str2[5]); // 错误输出
printf("%d\n", str2[5] == '\0'); // 判断是否含有空字符
char str3[6] = {
'c', 'h', 'i', 'n', 'a', '\0' };
printf("%c\n", str3[5]); // 输出空字符
printf("%d\n", str3[5] == '\0'); // 判断是否含有空字符
char str4[6] = {
"china" };
printf("%c\n", str4[5]); // 输出空字符
printf("%d\n", str4[5] == '\0'); // 判断是否含有空字符
char str5[5] = {
"china" };
printf("%c\n", str5[5]); // 错误输出
printf("%d\n", str5[5] == '\0'); // 判断是否含有空字符
char str6[6] = "china";
printf("%c\n", str6[5]); // 输出空字符
printf("%d\n", str6[5] == '\0'); // 判断是否含有空字符
return 0;
}
出力結果:
出力結果によると:
- 1 3 4 6 は同等で正しいです
- 2 5 は間違いです
2. 文字列の入出力
1. 複数の入力文字列と出力文字列の比較
関数 | フォーマット | 違い |
---|---|---|
scanf() | scanf("%s", 文字配列名) | スペースを含む文字列を入力することはできません。複数の書式制御文字 %s を使用して、複数の文字列を入力できます。入力を終了するスペースが見つかった場合は、文字列の末尾マーク '\0' を手動で追加する必要があります。 |
取得() | get(文字配列名) | 入力できる文字列は 1 つだけです。復帰文字が見つかると入力は終了し、復帰文字 '\n' は自動的に '\0' に変換されます。 |
printf() | printf("%s", 文字配列名) | printf() 関数は、出力後に行を自動的に折り返さずに複数の文字列を出力できます。 |
プット() | Puts(文字配列名) | Puts() 関数は文字列のみを出力でき、出力後に自動的にラップされます。 |
2. 文字ごとの入出力
- 標準入出力関数 scanf() および printf() を %c フォーマット記述子とともに使用します。
- 一定の文字数を入力する必要があります
#include<stdio.h>
int main()
{
int i;
char str[11];
printf("请输入十个字符:");
for (i = 0; i < 10; i++)
scanf("%c", &str[i]);
str[i] = '\0';
i = 0;
while (str[i] != '\0')
{
printf("%c", str[i]);
i++;
}
return 0;
}
- getchar() 関数と putchar() 関数を使用して文字列を入力および出力する
- 指定された制限内の文字数を入力するだけで、復帰文字を入力すると終了します。
#include<stdio.h>
int main()
{
int i=0;
char str[80];
printf("请输入一串字符:");
while ((str[i] = getchar()) != '\n')
i++;
str[i] = '\0';
for (i = 0; str[i] != '\0'; i++)
printf("%c", str[i]);
return 0;
}
3. 文字列の入力全般
- 標準入力関数 scanf() を %s 形式記述子とともに使用します
- 呼び出し形式: scanf("%s", 文字配列名);
- %s 形式制御文字を使用して文字列を入力する場合、scanf() 関数は文字列の後に自動的に「\0」を追加します。
#include<stdio.h>
int main()
{
char str[10];
printf("请输入一串字符:");
scanf("%s", str);//不用& str就是地址
printf("%s\n", str);
return 0;
}
途中にスペースを含む文字列を入力する必要がある場合は、複数の入力パラメータを指定して scanf() 関数を使用して入力を照合する必要があります。
#include<stdio.h>
int main()
{
char str1[5],str2[5], str3[5];
scanf("%s%s%s", str1, str2, str3);
printf("%s %s %s\n", str1, str2, str3);
return 0;
}
結果:
how are you
how are you
- 関数 gets() を使用して完全な文字列を入力します
- 呼び出し形式:gets(文字配列名);
- この関数は、キーボードによって入力された文字の行を文字列の形式で文字配列に保存できます。
- 文字行を入力する場合、Enter キーは終了文字として使用され、復帰文字「\n」は文字列の終了マークとして自動的に「\0」に変換されます。
#include<stdio.h>
int main()
{
char str[50];
gets(str);
printf("%s\n", str);
return 0;
}
結果:
how are you
how are you
4. 文字列出力
- %s フォーマット記述子を指定して標準出力関数 printf() を使用します。
- 呼び出し形式: printf("%s", 文字配列名);
#include<stdio.h>
int main()
{
char str1[]="How are you?";
char str2[] = "I am fine.Thank you.";
printf("%s\n%s\n", str1,str2);
return 0;
}
結果:
How are you?
I am fine.Thank you.
- 関数 put() を使用して完全な文字列を出力します
- 呼び出し形式:puts(文字配列名);
- この関数は、文字列 ('\0' で終わる一連の文字) を画面に出力できます。
- 出力後に自動的に折り返されます
#include<stdio.h>
int main()
{
char str[]="How are you?";
puts(str);
printf("I am fine.Thank you.");
return 0;
}
結果:
How are you?
I am fine.Thank you.//可看出换了行