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; }
时间: 2024-02-14 17:14:20 浏览: 52
这是一个函数,它的作用是去掉字符串左边的空格,并返回去掉空格后的字符串首地址。函数的实现是用指针 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的处理,返回值也更加明确。
改代码有错误吗 char *str_list[] = {str1, str2, str3, str4, NULL}; int max_len = 0; char *max_str = NULL; for (char **p = str_list; *p != NULL; p++) { int len = 0; for (char *q = *p; *q != '\0'; q++) { len++; } if (len > max_len) { max_len = len; max_str = *p; } } printf("Max string: %s", max_str);
这段代码看起来没有明显的语法错误,但是需要注意一些细节问题。首先,定义字符串数组时,必须保证数组中的每个元素都是字符串类型 (char*),否则会出现编译错误。其次,在计算字符串长度时,应该使用 strlen() 函数,而不是手动遍历字符串并计算字符数。此外,在输出结果时,最好在字符串后面加上换行符 \n,以便于在控制台输出时换行。修改后的代码如下:
```
char *str_list[] = {"str1", "str2", "str3", "str4", NULL};
int max_len = 0;
char *max_str = NULL;
for (char **p = str_list; *p != NULL; p++) {
int len = strlen(*p);
if (len > max_len) {
max_len = len;
max_str = *p;
}
}
printf("Max string: %s\n", max_str);
```
阅读全文