C语言解题

思路:

  1. 使用strrchr找到最右边的第一个空格,然后将指针移动到首字母。

注意:

  1. 获取输入时,尽量不要使用gets,有溢出风险,建议使用fgets(char *s, int n, FILE *stream);
  2. 使用fgets时,如果字符串长度小于n-1且结尾有换行符,则会获取换行符,并在换行符之后填充'\0',所以计算长度时需要判断是否需要减去换行符
#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;
}