目录
输入描述:
输入一行,代表要计算的字符串,非空,长度小于5000。
输出描述:
输出一个整数,表示输入字符串最后一个单词的长度。
一、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)
来获取。
如果输入文本中只有一个单词,则p
指向整个字符串的首字母,其长度就是整个字符串的字符数,可以使用strlen(str)
来获取。
数组指针是一个指针,它指向一个数组的首地址。指针和数组是紧密相关的,可以通过数组名来获取数组的首地址,并将其赋值给指针变量。
在C语言中,数组名本身就是一个指向数组首地址的指针,因此可以将数组名赋值给指针变量,从而得到一个指向数组首地址的指针。
数组的首位是指数组中第一个元素的地址。由于数组在内存中是连续存储的,因此第一个元素的地址也就是整个数组的首地址。可以通过数组名或者指针来获取数组的首地址,然后再通过偏移量来访问数组中的其他元素。
二、一些c语言库函数详细解释
1.EOF
EOF(End of File)是一个在 C 语言中表示文件结束的常量。在 C 语言中,EOF 定义在标准头文件 stdio.h 中,它是一个负整数常量,通常被定义为 -1。
EOF 通常用作标记表示文件结束,可以被用于检查读取输入时是否已到达文件末尾。在标准输入中,当用户输入文件结束符(在 Unix 系统中通常是 Ctrl+D,在 Windows 系统中通常是 Ctrl+Z)时,EOF 将被返回。EOF 也可以在文件中作为特殊字符出现,标记文件的结束。
2.fgets函数
fgets
是C标准库中的一个函数,用于从指定的文件流中读取一行字符串,并将其存储到指定的字符数组中。它的函数原型如下:
char *fgets(char *str, int n, FILE *stream);
其中,str
是一个指向字符数组的指针,用于存储读取的字符串;n
是要读取的最大字符数,通常为指定的字符数组长度减1,以便为字符串添加一个结束标志符\0
;stream
是要读取的文件流,通常为stdin
表示从标准输入流中读取数据。
fgets
函数每次读取一行数据,包括换行符,并将其存储到指定的字符数组中。如果读取的字符串长度大于指定的最大字符数n
,则函数只会读取n-1
个字符,并将剩余的字符留在输入缓冲区中等待下一次读取。
fgets
函数返回一个指向字符数组的指针,指向存储在str
中的读取字符串。如果读取到文件结尾或发生错误,fgets
函数将返回NULL
。
3.stdin
stdin
是一个C标准库中定义的文件指针,用于表示标准输入流(standard input stream)。在C语言中,stdin
指向标准输入设备,通常是键盘,可以用来读取用户的输入。
通过使用stdin
文件指针,可以从键盘或其他标准输入设备读取数据,并将其传递给程序。stdin
常常被用在C程序中,以便让程序与用户进行交互,例如读取用户输入的命令或数据等。使用stdin
指针可以方便地从控制台或命令行读取输入,并处理输入数据。
4.strrchr
全称为 "string reverse find character",其作用是在一个字符串中从后往前查找指定字符的位置。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 是字符串的首地址,所以 p - str
的结果就是字符串中最后一个 'o' 的位置与字符串首地址之间的字符个数。由于这个位置的索引是从 0 开始计数的,因此最终输出的结果需要加 1,才能得到最后一个 'o' 的实际位置。变量 str
的值是 "Hello, World!"
,它是一个字符数组,存储了这个字符串的所有字符,包括最后的 null 终止符。变量 p
的值是指向字符串 str
中最后一个字符 'o' 的指针,具体来说,它指向字符串中的第 8 个字符,因为在字符串中,字符的索引从 0 开始计数。由于变量 p
是通过 strrchr
函数找到的,因此它的值取决于 strrchr
函数的返回值,如果在字符串中找到了指定的字符,则返回该字符在字符串中最后一次出现的位置的指针;如果没找到,则返回空指针(NULL)。由于字符串中有两个字符 'o',而 strrchr
函数会查找最后一个字符 'o' 的位置,因此变量 p
的值应该是指向字符串中的字符 'o' 的指针,也就是 str
数组中的第 8 个元素的地址,也可以说是 &str[7]
。
5.strchr
strchr
函数是C语言中的字符串函数之一,它的作用是在一个字符串中查找指定字符第一次出现的位置。
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;
}
这个程序首先定义了一个字符串str
,然后调用strchr
函数查找字符串中第一次出现字符'w'的位置。如果找到了,程序输出该字符在字符串中的位置;否则输出"Not found"。
需要注意的是,strchr
函数只会查找指定字符在字符串中第一次出现的位置。如果需要查找所有的位置,可以使用strstr
函数。
6.strlen()
strlen()
是 C 标准库中的一个函数,用于确定以 null 结尾的字符串的长度。它接受一个参数,即指向以 null 结尾的字符串的指针,并返回一个整数值,表示字符串的长度。以下是一个示例:
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, world!";
int len = strlen(str);
printf("字符串的长度为 %d\n", len);
return 0;
}
在此示例中,strlen()
用于确定字符串 "Hello, world!"
的长度。len
的值将为 13,即字符串中的字符数,不包括 null 终止符。请注意,strlen()
函数仅适用于以 null 结尾的字符串,因此在将其传递给 strlen()
之前,请务必确保您的字符串已正确终止为 null 字符('\0'
)。