翻转字符串里的单词
描述:https://leetcode.cn/leetbook/read/array-and-string/crmp5/
错误代码
c语言代码⬇️
char * reverseWords(char * s){
int len = strlen(s) - 1;
int i,start,end;
char * ret = (char *)malloc(sizeof(char)*len);
int now = 0;
while(len >= 0){
if(s[len] != ' '){
end = len;
len--;
while(len >= 0 && s[len] != ' '){
len--;
}
start = len + 1;
for(i = start; i <= end; i++){
ret[now++] = s[i];
}
ret[now++] = ' ';
}else{//思考直接减行不行
len--;
}
}
ret[now] = '\0';
return ret;
}
错误原因:hey,bro,又堆栈溢出了,牛。
通过代码
通过代码1⬇️
char * reverseWords(char * s){
int len = strlen(s) - 1;
int i,start,end;
char * ret = (char *)malloc(sizeof(char)*(strlen(s) + 1));
int now = 0;
while(len >= 0){
if(s[len] != ' '){
end = len;
len--;
while(len >= 0 && s[len] != ' '){
len--;
}
start = len + 1;
for(i = start; i <= end; i++){
ret[now++] = s[i];
}
ret[now++] = ' ';
}else{//思考直接减行不行
len--;
}
}
ret[now-1] = '\0';
return ret;
}
通过代码2⬇️
总结
总结:错误代码中给返回数组申请的空间不足,len的值是strlen减1后的值。