题目:
给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。
如果不存在最后一个单词,请返回 0 。
说明:一个单词是指由字母组成,但不包含任何空格的字符串。
示例:
输入: “Hello World”
输出: 5
给定函数:int lengthOfLastWord(char s)*
思路:
- 判断字符串是否为空;
- 得到数组的长度,从末尾最后一个开始寻找不为space的字符
Ps:遇到" "情况无法判断;
更正后代码如下:
int lengthOfLastWord(char* s) {
int i=0;
int num=0;
if(*s=='\0')
return 0;
while(*(s+i)!='\0')
i++;
for(int j=0;j<i;j++)
{
if(*(s+j)==' ')
{
if(j==i-1)
return 0;
else
continue;
}
else
break;
}//判断是否全部为' ';
while(*(s+i-1)==' ')
i--;//找到部位' '的字符;
while(*(s+i-1)!=' ')
{
if(i!=0) i--,num++;
else return num;
}
return num;
}
代码比较水,贴上通过后个人觉得比较好的大神代码
①.
int lengthOfLastWord(char* s)
{
if(!s)
return 0;
int sLen = strlen(s);
int i = 0;
int lengthOfLastWordCount = 0;
while(s[sLen-1]==' ')
sLen--;
for(i = sLen-1;i>=0;i--) {
if(s[i]==' ') {
break;
}
lengthOfLastWordCount++;
}
return lengthOfLastWordCount;
}
巧妙之处在于最后一个循环避免了溢出的情况
for(i = sLen-1;i>=0;i--)
这个地方溢出弄了一段时间,有点菜,哈哈。
②.
int lengthOfLastWord(char* s) {
int i,j=0,sum=0;
if(strlen(s)==0) return 0;
for(i=0;s[i]!='\0';i++){
if(s[i]!=32) j=i;
}
for(i=0;i<=j;i++){
if(s[i]!=32) sum++;
else sum=0;
}
return sum;
}
这个代码对我这种新手简直是打击,
后面这个循环思维我是没有的。。。
for(i=0;i<=j;i++){
if(s[i]!=32) sum++;
else sum=0;
每次都会算出每个单词的长度,还循环。可以用作寻找字符串中最大单词长度的代码了~嗯,拿小本本记下来
第一次发博客,还请各位指点,以后坚持每天一篇啦~