题解 | #牛牛的名字游戏#

牛牛的名字游戏

https://www.nowcoder.com/practice/92320333267c482b8de09a9b56ef6d9d

int lengthOfLastWord(char* s ) 
{
    //通过从最后开始遍历
    char *p = s;
    p = p + strlen(s)-1;//因为最后一个是'\0'
    int count = 0;//记录字符长度
    for(;p >= s;p--)
    {
        if (*p != ' ') 
        {
            count++;
        }
        else if (count > 0) 
        {
            return count;
        }
    }
    return count;//解决只有一个单词的情况
}

题目问题:

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

需要解决的问题:

  1. 获取到最后一个“单词”(前面是空格,后面是空格,中间的字符串就是单词);
  2. 获取单词长度。

实现方法:

从字符串最后开始遍历->找到第一个不是空格的字符开始计数->遇见空格结束计数->返回计数

需要注意

  1. 字符串可能会是“cow”即一个单词的情况,需要设置这种情况的返回;
  2. 字符串可能会是“I am cow ”即最后有空格,我们需要跳过这些空格,直到遇见字母才开始计数;
  3. 同时在判断指针跳出条件的时候,我们需要考虑越界问题。
//笔者开始使用的代码,出现了越界问题
for(;p!=NULL;p--){}
/*
在这个代码里面,p是一个指向s的指针,我们需要判断其有没有超出字符串的首地址。但是使用 p != NULL 是错误的,
这是因为 p 是一个字符指针,它指向的是字符串中的字符,而不是指针本身,所以不能将其与NULL进行比较。
*/

for(;p >= s;p--){}
/*
在改正后的代码,我们使用了p(p指向的地址)与s(即字符串s的首地址)位置的比较,看看p所指向的地址是不是在s的首地址或者后面,来保证p不越界的问题。
*/

C语言刷题日记 文章被收录于专栏

备战秋招!

全部评论

相关推荐

评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务