char* trimr(char* str) { char *i; char *j=str; int l,len_str=0; if(str==0) { return 0; } i=str; while(*i!='\0') { len_str++; i++; } i--; for(l=0;l<len_str;l++) { if(*i==' ') { i--; } else { break; } }*(i+1)='\0'; return str; }
时间: 2024-02-14 18:14:19 浏览: 52
这段代码是一个函数,接受一个指向字符数组的指针,并返回指向修改后的字符数组的指针。该函数的作用是去除字符数组末尾的空格,即对字符数组进行右侧修剪(trim)操作。
代码中,首先定义了两个指针变量i和j,其中i指向字符数组的末尾,j指向字符数组的开头。接着,通过遍历字符数组,计算出字符数组的长度len_str。然后,将指针i向前移动,直到指向第一个非空格字符。最后,将i+1处的字符置为'\0',从而截断字符数组,返回指向字符数组的指针。
需要注意的是,该函数没有考虑字符数组全为空格的情况,也没有对输入参数进行有效性检查,可能会导致程序异常或崩溃。另外,该函数只能去除字符串末尾的空格,如果要去除字符串两端的空格,需要编写另外的代码。
相关问题
char* triml(char* str) { char *i; char *j=str; int l,len_str=0; if(str==0) { return 0; } i=str; while(*i!='\0') { len_str++; i++; } //i=str; for(l=0;l<len_str;l++) { if(*j==' ') { j++; } else { break; } } str=j; return str; }
这是一个函数,它的作用是去掉字符串左边的空格,并返回去掉空格后的字符串首地址。函数的实现是用指针 i 计算字符串的长度,然后用指针 j 指向字符串的首地址,循环判断 j 指向的字符是否为空格,如果是空格就将 j 指向下一个字符,直到找到第一个非空格字符的位置。最后将 str 指针指向 j 指向的位置,即去掉左边的空格后的字符串的首地址,然后返回该指针。
分析测试这段代码有几处缺陷可以该进并举例int findr(char* str, char* sub) { char *i,*j,*k,*n; int l,m; int len_str,len_sub; len_str = 0; len_sub = 0; i = str; j = sub; while(*i != '\0') { i++; len_str++; } i--; while(*j != '\0') { j++; len_sub++; } j--; n = j; for(l = len_str;l >= len_str - len_sub + 1;l--) {k = i; for(m = 1;m <= len_sub; m++) {if(*k == *j) { k--; j--; } else break; } if(m > len_sub) break; i--; j = n; } if(l < len_str - len_sub + 1) return -1; else return (l - len_sub+1);}
这段代码可能存在以下缺陷:
1. 变量命名不规范,不易读懂,例如变量i、j、k等。
2. 函数参数为char*类型时,应该考虑指针是否为空的情况,否则在访问指针所指向的空间时可能会出现非法访问。
3. 函数中未对输入的字符串长度做判断,当输入的字符串长度为0时,程序可能会出现异常。
4. 函数中存在一些冗余的代码,例如计算字符串长度时可以使用strlen函数等。
5. 函数中的算法实现可以更简洁,例如可以使用指针来实现字符串匹配。
6. 函数返回值只有-1和非负整数两种情况,无法体现具体错误信息。
下面是改进后的代码:
```
int find_substring(char* str, char* sub) {
if (str == NULL || sub == NULL) {
return -1;
}
int len_str = strlen(str);
int len_sub = strlen(sub);
if (len_str == 0 || len_sub == 0 || len_sub > len_str) {
return -1;
}
char* p = strstr(str, sub);
if (p == NULL) {
return -1;
}
return (int)(p - str);
}
```
改进后的代码使用了strstr函数查找子串,可以更简洁地实现字符串匹配。同时,增加了对参数为空和字符串长度为0的处理,返回值也更加明确。
阅读全文