HJ1 字符串最后一个单词的长度(strchr找到空格即最后一个单词)

这段代码展示了如何计算一个以空格分隔的字符串中最后一个单词的长度。程序通过`gets()`函数读取输入,使用`strrchr()`查找最后一个空格,然后计算剩余部分的长度作为最后一个单词的长度。示例输入`hellonowcoder`中,最后一个单词`nowcoder`的长度为8。

字符串最后一个单词的长度


描述
计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)
输入描述:
输入一行,代表要计算的字符串,非空,长度小于5000。

输出描述:
输出一个整数,表示输入字符串最后一个单词的长度。

hello nowcoder
8
说明:
最后一个单词为nowcoder,长度为8   
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define M_MAX_STR_LEN     5000 
int main()
{
    unsigned int len = 0;
    char *lastStr = NULL;
    char strBuf[M_MAX_STR_LEN] = {0};
    /* 
     * 从标准输入 stdin 读取一行,并把它存储在 str 所指向的字符串中。
     * 当读取到换行符时,或者到达文件末尾时,它会停止 
     * 如果成功,该函数返回 str。如果发生错误或者到达文件末尾时还未读取任何字符,则返回 NULL
     */
    gets(strBuf);
    // printf("strBuf: %s\n", strBuf);
    /* 该函数返回 str 中最后一次出现字符 c 的位置。如果未找到该值,则函数返回一个空指针 */
    lastStr = strrchr(strBuf, ' ');
    if (lastStr == NULL) {
        len = strlen(strBuf);
    } else {
        lastStr++;
        len = strlen(lastStr);
    }

    printf("%d",len);
    return 0;
}
<think>好的,用户的问题是在C语言中如何找到字符串最后一个逗号的位置。我需要先理解用户的需求。用户可能正在处理字符串解析,比如解析CSV文件或者处理有逗号分隔的数据,需要定位最后一个逗号的位置来进行某些操作,比如分割最后一个字段。首先,C语言标准库中有没有直接提供这样的函数呢?我记得标准库中有strchr函数,用于查找字符第一次出现的位置,比如strchr(str,',')会返回第一个逗号的指针。但是用户需要的是最后一个逗号的位置,这可能需要自己实现。用户提到的引用[1]和[2]中提到了strstr和strpbrk函数,但这些是用来查找子字符串或者多个字符中的任意一个的首次出现,可能不适用。引用[4]提到去除字符串最后的逗号,可能涉及到找到最后一个逗号的位置,但给出的例子是其他语言的方法,比如Java中的indexOf,但C语言中没有类似的内置函数。接下来,我需要考虑如何用C语言实现这个功能。可能的思路是从字符串的末尾向前遍历,直到找到第一个逗号为止。或者,也可以从前往后遍历,记录每次遇到的逗号的位置,最后保留最后一次的位置。不过从后往前可能更高效,特别是当字符串很长时,找到最后一个逗号可以更快。具体实现步骤可能包括:1.获取字符串长度,或者直接遍历到字符串结尾('\0')。2.从字符串最后一个字符开始向前检查每个字符是否是逗号。3.一旦找到逗号,返回其指针;如果遍历完整个字符串都没找到,返回NULL。需要注意的是,字符串可能为空,或者没有逗号的情况,这时候函数应该返回NULL。另外,要确保不越界访问,比如当字符串长度为0时,不能访问负索引。可能的实现函数如下:-使用strrchr函数:实际上,C标准库中有一个strrchr函数,它用于查找字符在字符串中最后一次出现的位置。例如,strrchr(str,',')会返回最后一个逗号的指针。这可能直接解决用户的问题,而不需要自己编写函数。但用户可能不知道这个函数的存在,或者需要自己实现类似的功能。如果用户需要自己实现,比如在面试题中或者练习,可以手动遍历字符串。例如:char*find_last_comma(constchar*str){if(str==NULL)returnNULL;char*last_comma=NULL;while(*str!='\0'){if(*str==','){last_comma=(char*)str;}str++;}returnlast_comma;}这个函数从前往后遍历,每次遇到逗号就更新last_comma指针,最后返回最后一次的位置。这种方法的时间复杂度是O(n),需要遍历整个字符串。或者,使用strrchr函数的话,代码更简洁:#include<string.h>char*find_last_comma(constchar*str){returnstrrchr(str,',');}不过用户的问题可能需要自己实现,所以需要展示如何手动实现。同时要处理可能的边界情况,比如空指针、空字符串、没有逗号的情况。在回答中需要指出strrchr的存在,并提供两种方法:使用标准库函数和手动实现。这样用户可以根据需要选择。此外,需要给出示例代码,并说明注意事项,比如参数检查。用户可能的问题还包括效率比较,或者如何处理其他类似的字符查找。生成的相关问题可以包括如何查找最后一个出现的子字符串,或者如何优化这种查找方法。</think>在C语言中查找字符串最后一个逗号的位置可以通过两种方式实现:使用标准库函数`strrchr`或手动遍历实现。以下是具体实现方法和示例代码: ### 一、使用标准库函数 `strrchr` `strrchr`函数是C标准库中专门用于查找字符最后一次出现位置的函数[^2]。其函数原型为: ```c char *strrchr(const char *str, int c); ``` 实现代码示例: ```c #include <stdio.h> #include <string.h> char* find_last_comma(const char* str) { if (str == NULL) return NULL; // 空指针检查 return strrchr(str, ','); // 直接调用库函数 } ``` ### 二、手动遍历实现 若需自主实现逻辑,可通过**反向遍历**或**正向遍历记录位置**实现: ```c char* find_last_comma(const char* str) { if (str == NULL) return NULL; const char *last_comma = NULL; // 正向遍历,记录最后一个逗号的位置 while (*str != '\0') { if (*str == ',') last_comma = str; str++; } return (char*)last_comma; // 未找到则返回NULL } ``` ### 三、使用示例 ```c int main() { char text[] = "apple,banana,cherry,date"; char *result = find_last_comma(text); if (result != NULL) { printf("最后一个逗号位置:%ld\n", result - text); // 输出:20 } return 0; } ``` ### 注意事项 1. **参数有效性检查**:需处理`NULL`指针输入 2. **空字符串处理**:若字符串长度为0,函数直接返回`NULL` 3. **未找到返回值**:未找到逗号时返回`NULL`,调用方需做判空处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未停丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值