题解 | #牛牛的名字游戏#
牛牛的名字游戏
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;//解决只有一个单词的情况 }
题目问题:
计算字符串中最后一个单词的长度
需要解决的问题:
- 获取到最后一个“单词”(前面是空格,后面是空格,中间的字符串就是单词);
- 获取单词长度。
实现方法:
从字符串最后开始遍历->找到第一个不是空格的字符开始计数->遇见空格结束计数->返回计数
需要注意:
- 字符串可能会是“cow”即一个单词的情况,需要设置这种情况的返回;
- 字符串可能会是“I am cow ”即最后有空格,我们需要跳过这些空格,直到遇见字母才开始计数;
- 同时在判断指针跳出条件的时候,我们需要考虑越界问题。
//笔者开始使用的代码,出现了越界问题 for(;p!=NULL;p--){} /* 在这个代码里面,p是一个指向s的指针,我们需要判断其有没有超出字符串的首地址。但是使用 p != NULL 是错误的, 这是因为 p 是一个字符指针,它指向的是字符串中的字符,而不是指针本身,所以不能将其与NULL进行比较。 */ for(;p >= s;p--){} /* 在改正后的代码,我们使用了p(p指向的地址)与s(即字符串s的首地址)位置的比较,看看p所指向的地址是不是在s的首地址或者后面,来保证p不越界的问题。 */
C语言刷题日记 文章被收录于专栏
备战秋招!