问题描述
计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)
输入描述:
输入一行,代表要计算的字符串,非空,长度小于5000。
输出描述:
输出一个整数,表示输入字符串最后一个单词的长度。
解题分析
本题有两个难点: 1、如何找到最后一个空格后单词 2、如果用户输入字符串中没有空格该如何判断
基于在这道题,我们可以采用递归的方法,在递归函数里面传入字符串首元素地址并用字符型数组接受,并记录。接下来我们的目标就是找到空格或是‘\0’,让指针一直++,直到指针所指向的字符为空格为止。接着就把该地址继续传入递归函数中,而递归结束的条件就是找到'\0'。
思路咱们已经分析完了,而这次字符串我们不能用scnaf("%s",arr)的方式来接收,因为
%s是以空格或回车作为结束标志的。
这次我们用fgets()函数来接收可以避免遇到空格就结束的问题,而fgets函数有个特点就是会吧'\n'也存储起来,所以最后统计字符串长度时要-1
(fgets具体讲解可以参照这篇:【C库函数】fgets详解)
代码实现
#include<stdio.h> #include<string.h> char* find(char* str) { char* ret = str; while (*str != ' ' && *str != '\0') { str++; } if (*str != '\0') { str++; return find(str); } else { return ret; } } int main() { char arr[1000]; fgets(arr, 1000, stdin); int count = 0; char* len = find(arr); printf("%d\n", strlen(len) - 1); return 0; }