题目:规定输入的字符串中只包含字母和*号。请编写函数fun,其功能 是:将字符串尾部的*号全部删除,前面和中间的*号不动。 例如:字符串中的内容为:"****A*BC*DEF*G********", 应当是:*"****A*BC*DEF*G"
时间: 2024-06-25 16:00:26 浏览: 82
为了实现这个功能,你可以编写一个名为 `fun` 的 C 语言函数,该函数接受一个指向字符数组的指针,并遍历字符串,直到遇到字符串结尾或者遇到非星号字符。然后返回修改后的字符串。以下是一个简单的实现:
```c
#include <stdio.h>
#include <string.h>
// 函数声明,返回值为指向新字符串的指针(不是原始字符串,而是新分配的空间)
char* fun(char* str);
// 主要的 fun 函数实现
char* fun(char* str) {
int i = 0, j = strlen(str) - 1; // i 用于遍历字符串前半部分,j 从后往前遍历
while (i < j && str[i] == '*') { // 当前字符是 *,并且 i 不到 j 时
i++; // 前进一位
}
// 在找到非 * 字符或者到达字符串尾部时停止
char* new_str = (char*)malloc(strlen(str) - (j - i + 1)); // 重新分配内存空间
strncpy(new_str, str + i, strlen(str) - i); // 复制非 * 部分到新字符串
new_str[strlen(new_str) - 1] = '\0'; // 添加字符串结束符
return new_str;
}
int main() {
char str[] = "****A*BC*DEF*G********";
char* result = fun(str);
printf("Modified string: %s\n", result); // 输出结果
free(result); // 释放新字符串内存
return 0;
}
```
在这个代码中,`fun` 函数首先找到第一个非 * 字符的位置,然后创建一个新的字符串并复制这部分内容到新字符串中。注意,你需要确保在使用完新字符串后调用 `free` 函数来释放动态分配的内存。
阅读全文