计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)

目录

一、c语言代码实现

二、一些c语言库函数详细解释

1.EOF

2.fgets函数

3.stdin

4.strrchr

5.strchr

6.strlen()


输入描述:

输入一行,代表要计算的字符串,非空,长度小于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,以便为字符串添加一个结束标志符\0stream是要读取的文件流,通常为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')。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值