华为机试每日一练--第四题:字符串最后一个单词的长度

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

练习题入口

问题描述

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


输入描述:

输入一行,代表要计算的字符串,非空,长度小于5000。


输出描述:

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

c6fb890aef41669b26bb5e2e0e172614_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aiB5aiB5rKB5rKB,size_20,color_FFFFFF,t_70,g_se,x_16.png


解题分析

       本题有两个难点: 1、如何找到最后一个空格后单词  2、如果用户输入字符串中没有空格该如何判断


       基于在这道题,我们可以采用递归的方法,在递归函数里面传入字符串首元素地址并用字符型数组接受,并记录。接下来我们的目标就是找到空格或是‘\0’,让指针一直++,直到指针所指向的字符为空格为止。接着就把该地址继续传入递归函数中,而递归结束的条件就是找到'\0'。

ab7b514a65ccb623bdf70aa1badd32ed_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aiB5aiB5rKB5rKB,size_20,color_FFFFFF,t_70,g_se,x_16.png

       思路咱们已经分析完了,而这次字符串我们不能用scnaf("%s",arr)的方式来接收,因为


%s是以空格或回车作为结束标志的。

d49f01afd8ff57ede90b0ff17461cb69_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aiB5aiB5rKB5rKB,size_20,color_FFFFFF,t_70,g_se,x_16.png

        这次我们用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;
}
相关文章
|
6月前
|
索引
《华为机试》——查找两个字符串a,b中的最长公共子串
《华为机试》——查找两个字符串a,b中的最长公共子串
|
6月前
|
Java
java字符串练习题6、最后一个单词的长度
java字符串练习题6、最后一个单词的长度
43 0
|
6月前
|
机器人 Java
每日一刷《剑指offer》字符串篇之第一个只出现一次的字符
每日一刷《剑指offer》字符串篇之第一个只出现一次的字符
69 0
每日一刷《剑指offer》字符串篇之第一个只出现一次的字符
|
6月前
|
Java
每日一题《剑指offer》字符串篇之字符串的排列
每日一题《剑指offer》字符串篇之字符串的排列
77 0
每日一题《剑指offer》字符串篇之字符串的排列
华为机试HJ1:字符串最后一个单词的长度
华为机试HJ1:字符串最后一个单词的长度
华为机试每日一练--第三题:字符串分隔
连续输入字符串,请按长度为8拆分每个输入字符串并进行输出; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
华为机试每日一练--第三题:字符串分隔
华为机试每日一练--第十题: 句子逆序
华为机试每日一练--第十题: 句子逆序
华为机试每日一练--第十题: 句子逆序
LeetCode每日一题——1624. 两个相同字符之间的最长子字符串
子字符串 是字符串中的一个连续字符序列。
83 0
|
索引
Leetcode每日一题——找到字符串中所有字母异位词
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
82 0