/*假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部删除,中间和后面的*号不删除。 例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G*******。 注意:部分源程序给出如下
时间: 2023-07-23 16:12:11 浏览: 97
根据题目描述,可以使用指针操作来实现字符串的修改。具体的思路是:
1. 使用指针 p 指向字符串的首地址,使用指针 q 指向第一个非 * 号的位置。
2. 遍历字符串,找到第一个非 * 号的位置,将 q 指向该位置。
3. 将 p 和 q 指针之间的所有 * 号删除。
4. 将 p 指针移到 q 指针所在的位置,然后重复步骤 2 和 3,直到字符串的末尾。
具体的实现代码如下:
```c
void fun(char *str) {
// 使用指针 p 和 q 来指向字符串中的位置
char *p = str;
char *q = str;
// 找到第一个非 * 号的位置
while (*q == '*') {
q++;
}
// 遍历字符串,删除前导 * 号
while (*q != '\0') {
// 如果当前位置是 * 号,则将 p 指针移到该位置
if (*q == '*') {
p = q;
}
// 如果当前位置不是 * 号,则将 p 和 q 之间的 * 号删除
else {
while (p < q) {
*p = *q;
*q = '*';
p++;
}
}
// 将 q 指针移到下一个位置
q++;
}
}
```
注意,在删除 * 号时,我们是通过将 p 和 q 之间的字符向前移动来实现的,这样可以保证字符串的顺序不变。同时,我们将 q 指针移到下一个位置,是为了继续查找下一个非 * 号的位置。
阅读全文