#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

京公网安备 11010502036488号