用C语言写一个函数,其功能是对一个字符串的内容进行压缩,压缩的规则是:如果该字符是第一次和第二次出现的字母(区分大小写),则保留;否则,则删去(标点符号、空格等非字去)。通过函数返回压缩结果。在主函数中输入一个不长于50的字符串,调用上述函数进行压缩,并输出结果。
时间: 2024-05-13 10:14:47 浏览: 127
以下是用C语言实现的函数:
```c
#include <stdio.h>
#include <string.h>
char* compress(char* str) {
int len = strlen(str);
int i, j, k;
char* res = (char*) malloc(len * sizeof(char));
int count[26] = {0};
for (i = 0, j = 0; i < len; i++) {
if (str[i] >= 'A' && str[i] <= 'Z') {
k = str[i] - 'A';
} else if (str[i] >= 'a' && str[i] <= 'z') {
k = str[i] - 'a';
} else {
continue;
}
if (count[k] < 2) {
count[k]++;
res[j++] = str[i];
} else if (count[k] == 2) {
for (k = 0; k < j; k++) {
if (res[k] == str[i]) {
break;
}
}
if (k == j) {
continue;
} else {
res[j++] = str[i];
}
}
}
res[j] = '\0';
return res;
}
int main() {
char str[50];
printf("Enter a string (length <= 50): ");
fgets(str, 50, stdin);
str[strcspn(str, "\n")] = '\0';
char* res = compress(str);
printf("Compressed string: %s\n", res);
free(res);
return 0;
}
```
函数 `compress` 接受一个字符串作为输入参数,并返回一个指向压缩后的结果字符串的指针。该函数中使用了一个计数器数组 `count` 来记录每个字母出现的次数,然后根据出现次数决定是否将该字母加入到压缩结果字符串中。
在主函数中,首先接受用户输入的字符串,然后调用 `compress` 函数进行压缩,并输出结果。注意在使用 `fgets` 函数接受用户输入时,需要去掉输入字符串中的换行符。最后,为了避免内存泄漏,需要在使用完 `compress` 函数返回的结果字符串后,调用 `free` 函数释放相应的内存空间。
阅读全文