7、假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是: 除了字符串前导和尾部的*号之外,将串中其它*号全部删除。形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。 例如,字符串中的内容为:****A*BC*DEF*G********,删除后,字符串中的内容应当是:****ABCDEFG********。在编写函数时,不得使用C语言提供的字符串函数。
时间: 2023-07-23 17:31:33 浏览: 77
下面是函数fun的实现过程:
```c
void fun(char *h, char *p)
{
char *q = h + 1; // q指向第二个字符
char *r = p - 1; // r指向倒数第二个字符
while (*q == '*') { // 处理前导*号
q++;
}
while (*r == '*') { // 处理尾部*号
r--;
}
while (q <= r) { // 处理中间的*号
if (*q == '*') { // 如果q指向的是*号
char *s = q + 1; // s指向q的下一个字符
while (*s == '*') { // 寻找下一个不是*号的字符
s++;
}
if (s <= r) { // 如果找到了不是*号的字符
*q = *s; // 将该字符复制到q所指的位置
*s = '*'; // 将s所指的位置置为*号
} else { // 如果没有找到不是*号的字符
break; // 退出循环
}
}
q++; // 处理下一个字符
}
while (h < q) { // 在前面补上*号
*h++ = '*';
}
while (r < p) { // 在后面补上*号
*++r = '*';
}
}
```
函数的主要思路是:先处理前导*号和尾部*号,然后处理中间的*号。在处理中间的*号时,从左向右遍历字符串,遇到*号就寻找下一个不是*号的字符,将该字符复制到*号所在的位置,然后将原来的位置置为*号。处理完中间的*号后,在前面和后面分别补上*号即可。
阅读全文