#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