题解 | #字符串最后一个单词的长度#

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

https://www.nowcoder.com/practice/8c949ea5f36f422594b306a2300315da

#include <stdio.h>
#include<malloc.h>
#include<string.h>


// //这题想正着去找空格很难,所以可以逆着找。
// //定义两个指针,一个位于尾部不动,一个指针往前走
// //直到遇见空格或者已经走完这个字符串退出,用末尾减去开头+1就是最后一个单词的长度
int getlen(char *str)
{
     int len=strlen(str);
  //从后往前数
     char *begin=str+len-1;
     char *tail=str+len-1;  //始终位于最后一位不动
     while((*(begin-1)!=' ')&&(begin>str))  //比str大说明没走到头
     {
       begin--;
     }

  return tail-begin+1;   //最后一位减去直到空格的left+1为最后一个长度

   
}


int main() {
  char str[5000]={0};
  str[0]=' ';
 scanf("%s",str);
  int len=getlen(str);
  printf("%d\n",len);
 
}

1、这题想正着去找空格很难,所以可以逆着找。

定义两个指针,一个位于尾部不动,一个指针往前走

直到遇见空格或者已经走完这个字符串退出,用末尾减去开头+1就是最后一个单词的长度

2、补充一下

gets(str)与scanf("%s",str);的区别

开始我使用了 scanf("%s",str);是用用例没通过的,问题就出在了我应该用gets(str);

区别就是:scanf()函数取数据(从输入缓冲区取)时遇到回车(linux 回车符'\n')、空格、TAB就会停止

并且%s开始时遇到空格或者回车符号时会自动过滤,所以会漏掉空格,而采用gets(str)原样输出

例如:

char str[80];

scanf("%s",str);

printf("%s",str);

输入I love you

输出 I

gets(str);

printf("%s",str);

输入I love you

输出I love you

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

自己从头开始刷的C语言

全部评论

相关推荐

zYvv:双一流加大加粗再标红,然后广投。主要是获奖荣誉不够,建议开始不用追求大厂,去别的厂子刷下实习。
点赞 评论 收藏
分享
废物一个0offer:认真的吗二本本科找人工智能岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-08 11:16
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务