題目:
給定一個僅包含大小寫字母和空格 ’ ’ 的字元串,傳回其最後一個單詞的長度。
如果不存在最後一個單詞,請傳回 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;
每次都會算出每個單詞的長度,還循環。可以用作尋找字元串中最大單詞長度的代碼了~嗯,拿小本本記下來
第一次發部落格,還請各位指點,以後堅持每天一篇啦~