题目描述: 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。 输入描述: 输入为一个字符串,字符串长度小于100; 输出描述: 输出为清理后的字符串; 样式输入: ****A*BC*DEF*G******* 样式输出: ****A*BC*DEF*G
#include <stdio.h>
#include <string.h>
#include <malloc.h>
// 定义一个函数,用于清理字符串中的星号(*)
char* cleanString(const char* input) {
// 获取输入字符串的长度
int len = strlen(input);
// 初始化最后一个非星号字符的索引
int lastNonStarIndex = len - 1;
// 从后往前遍历字符串,找到最后一个非星号字符的位置
while (lastNonStarIndex >= 0 && input[lastNonStarIndex] == '*') {
lastNonStarIndex--;
}
// 根据最后一个非星号字符的位置,分配内存空间给结果字符串
char* result = (char*)malloc((lastNonStarIndex + 2) * sizeof(char));
// 将输入字符串的前 lastNonStarIndex + 1 个字符复制到结果字符串中
strncpy(result, input, lastNonStarIndex + 1);
// 在结果字符串末尾添加空字符 '\0'
result[lastNonStarIndex + 1] = '\0';
// 返回结果字符串
return result;
}
int main() {
// 定义一个字符数组,用于存储输入字符串
char input[100];
// 从标准输入读取一行字符串
scanf("%s", input);
// 调用 cleanString 函数,清理输入字符串中的星号(*)
char* result = cleanString(input);
// 将清理后的字符串输出到标准输出
printf("%s", result);
// 释放结果字符串所占用的内存空间
free(result);
return 0;
}