#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