目次
説明を入力してください:
計算対象の空ではない文字列を表す行を入力します。長さは 5000 未満です。
出力の説明:
入力文字列の最後の単語の長さを表す整数を出力します。
1. C言語コードの実装
#include <stdio.h> //printf, fgets, stdin
#include <string.h> //strrchr, strchr, strlen
int main(void)
{
char str[5000] = {0};
int length = 0;
char *p = NULL;
/* 使用fgets从标准输入(stdin)获取一行 */
fgets(str, sizeof(str), stdin);
/* 使用strrchr找到最右边的第一个空格 */
p = strrchr(str, ' ');
if (p)
p = p + 1; //指向首字母
else
p = str; //只有一个单词
/* 使用strchr查找是否存在换行符 */
if (strchr(p, '\n'))
length = strlen(p) - 1;
else
length = strlen(p);
printf("%d\n", length);
return 0;
}
p
strlen
関数を使用して長さを取得できる文字列を指します。
入力テキストに複数の単語がある場合、p
最後の単語の最初の文字を指し、その長さは単語の文字数になります。これは で取得できますstrlen(p)
。
入力テキストに単語が 1 つだけある場合、その単語はp
文字列全体の最初の文字を指し、その長さは文字列全体の文字数になります。これは で取得できますstrlen(str)
。
配列ポインタは、配列の最初のアドレスを指すポインタです。ポインターと配列は密接な関係にあり、配列名を通じて配列の最初のアドレスを取得し、それをポインター変数に割り当てることができます。
C 言語では、配列名自体が配列の先頭アドレスへのポインタであるため、配列名をポインタ変数に代入して配列の先頭アドレスへのポインタを取得できます。
配列の最初のビットは、配列内の最初の要素のアドレスを参照します。配列はメモリに継続的に格納されるため、最初の要素のアドレスは配列全体の最初のアドレスでもあります。配列名またはポインターを通じて配列の最初のアドレスを取得し、オフセットを通じて配列内の他の要素にアクセスできます。
2. C言語ライブラリ関数の詳細説明
1.EOF
EOF(End of File)とは、C言語でファイルの終わりを示す定数です。C 言語では、EOF は標準ヘッダー ファイル stdio.h で定義され、負の整数定数で、通常は -1 として定義されます。
EOF は通常、ファイルの終わりを示すマーカーとして使用され、入力を読み取るときにファイルの終わりに到達したかどうかを確認するために使用できます。標準入力では、ユーザーがファイルの終わり文字 (通常は Unix システムでは Ctrl+D、Windows システムでは Ctrl+Z) を入力すると EOF が返されます。EOF は、ファイルの終わりを示す特殊文字としてファイル内に出現することもあります。
2. fget関数
fgets
C 標準ライブラリの関数で、指定されたファイル ストリームから文字列の行を読み取り、指定された文字配列に格納するために使用されます。その関数プロトタイプは次のとおりです。
char *fgets(char *str, int n, FILE *stream);
その中には、str
は読み取った文字列を格納するために使用される文字配列へのポインタ、n
は読み取られる最大文字数、通常は文字列に終了マーカーを追加するために、指定された文字配列の長さから 1 を引いたものです\0
。stream
読み取るファイル ストリームは、通常、stdin
標準入力ストリームからデータを読み取ることを意味します。
fgets
この関数は、改行文字を含むデータを一度に 1 行ずつ読み取り、指定された文字配列に格納します。読み取られた文字列の長さが指定された最大文字数より大きい場合n
、関数はn-1
文字のみを読み取り、残りの文字は次の読み取りのために入力バッファーに残します。
fgets
str
この関数は、に格納されている読み取り文字列を指す文字配列へのポインタを返します。fgets
この関数は、ファイルの終わりが読み取られた場合、またはエラーが発生した場合に戻りますNULL
。
3.標準入力
stdin
C 標準ライブラリで定義されているファイル ポインタで、標準入力ストリーム (標準入力ストリーム) を表すために使用されます。C では、stdin
ユーザー入力を読み取るために使用できる標準入力デバイス (通常はキーボード) を指します。
ファイル ポインターを使用するとstdin
、キーボードまたはその他の標準入力デバイスからデータを読み取り、プログラムに渡すことができます。stdin
これは、ユーザーが入力したコマンドやデータを読み取るなど、プログラムがユーザーと対話できるようにするために C プログラムでよく使用されます。ポインターを使用すると、stdin
コンソールまたはコマンド ラインから入力を読み取り、入力データを処理するのに便利な方法です。
4.ストレッチャー
正式名称は「文字列逆検索文字」で、その機能は文字列内の指定された文字の位置を後ろから前に検索することです。strrchr は、文字列内の指定された文字の最後の出現を検索するために使用される C 標準ライブラリ関数です。このstrrchr
関数は、文字自体の値ではなく、文字列内の特定の位置を指すポインタ型を返します。関数のプロトタイプは次のとおりです。
char *strrchr(const char *s, int c);
ここで、s は検索する文字列、c は検索する文字です。
この関数は、最後に出現した文字 c へのポインターを返します。または、 c がs に出現しない場合はNULL を返します。
たとえば、次のコードは、strrchr 関数を使用して文字列内の最後の "o" の位置を検索する方法を示しています。
char str[] = "Hello, World!";
char *p = strrchr(str, 'o');
if (p)
printf("Last 'o' found at position %ld.\n", p - str);
else
printf("'o' not found in the string.\n");
出力は次のとおりです。
Last 'o' found at position 8.
この例では、ポインター p は文字列内の最後の文字「o」の位置を指しており、文字列内のこの位置のインデックスはポインターの減算を使用して計算できます。p - str
計算方法は、ポインタ p の指すアドレスからポインタ str の指すアドレスを減算し、両者のアドレスの差を求めるもので、この差の単位は文字サイズ(通常はバイト)です。つまり、それらの間で何文字違いますか。この特定の例では、p は文字列 str 内の最後の 'o' の位置を指し、str は文字列の最初のアドレスであるため、結果は文字列内の最後の 'o' の位置p - str
と文字列の最初のアドレス、間の文字数。この位置のインデックスは 0 からカウントされるため、最後の「o」の実際の位置を取得するには、最終的な出力結果に 1 を加算する必要があります。変数str
の値"Hello, World!"
は、最後のヌル終端文字を含むこの文字列のすべての文字を格納する文字配列であることを意味します。変数の値は、文字列内の最後の文字 'o' へのポインタです。具体的には、文字列内の文字は 0 からインデックス付けされるため、文字列内の 8 番目の文字を指しますp
。str
変数は関数p
によって検出されるため、その値は関数の戻り値によって異なります。指定された文字が文字列内で見つかった場合は、文字列内で最後に出現した文字へのポインタが返されます。見つからなかった場合は、戻り値が返されます。ヌルポインタ(NULL)。文字列には 2 つの文字「o」があり、関数は最後の文字「o」の位置を検索するため、変数の値は文字列内の8 番目の文字「o」へのポインタである必要があります。配列内の文字 いわば要素のアドレス。strrchr
strrchr
strrchr
p
str
&str[7]
5番目のstr
strchr
この関数は C 言語の文字列関数の 1 つであり、その機能は、文字列内で最初に出現する指定された文字を検索することです。
strchr
関数の宣言は次のとおりです。
char *strchr(const char *str, int c);
ここでstr
、 は検索する文字列、c
は検索する文字です。この関数は、指定された文字が最初に出現する位置へのポインターを返します。指定された文字が見つからない場合、関数はヌル ポインター (NULL) を返します。
strchr
この関数を使用したサンプルコードは次のとおりです。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "hello, world";
char *p;
p = strchr(str, 'w');
if (p != NULL) {
printf("Found '%c' at position %ld\n", *p, p - str);
} else {
printf("Not found\n");
}
return 0;
}
このプログラムは、まず string を定義しstr
、次にstrchr
関数を呼び出して、文字列内で最初に出現する文字 'w' を検索します。見つかった場合、プログラムは文字列内の文字の位置を出力し、見つからなかった場合は「見つかりません」を出力します。
この関数は、文字列内の指定された文字の最初の出現のみを検索することに注意してくださいstrchr
。すべての場所を検索する必要がある場合は、strstr
関数を使用できます。
6.ストレン()
strlen()
は、NULL で終わる文字列の長さを決定する C 標準ライブラリの関数です。これは、NULL で終わる文字列へのポインタを 1 つのパラメータとして受け取り、文字列の長さを表す整数値を返します。以下に例を示します。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, world!";
int len = strlen(str);
printf("字符串的长度为 %d\n", len);
return 0;
}
この例では、文字列の長さをstrlen()
決定します。の値は、ヌル終端文字を含まない文字列の文字数である 13 になります。この関数はnull で終了する文字列でのみ機能するため、文字列を に渡す前にnull 文字 ( )で適切に終了していることを確認することが重要です。"Hello, world!"
len
strlen()
strlen()
'\0'