用c语言设计一个字符过滤器,任意输入8个字符串(字符串长度不超过15),将输入的字符串中除大小写字母外的其他字符全部去掉,并按照字符串大小的顺序输出
时间: 2024-11-23 10:30:48 浏览: 12
关于读取popen输出结果时未截断字符串导致的命令行注入详解
要设计一个C语言程序实现字符过滤器,可以按以下步骤操作:
1. 定义一个结构体来存储字符串及其对应的过滤后的版本,包含原始字符串和转换后的字符串。
```c
#include <stdio.h>
#include <ctype.h>
typedef struct {
char original[16];
char filtered[16];
} StringFilter;
```
2. 输入字符串,并将其过滤(只保留字母)
```c
void input_and_filter(StringFilter* str) {
printf("请输入一个字符串(不超过15字符): ");
fgets(str->original, sizeof(str->original), stdin);
// 移除末尾的换行符
size_t len = strlen(str->original);
if (str->original[len - 1] == '\n') {
str->original[len - 1] = '\0';
}
// 过滤非字母字符
for (size_t i = 0; i < len; ++i) {
if (isalpha(str->original[i])) {
str->filtered[i] = tolower(str->original[i]); // 转化为小写
} else {
str->filtered[i] = '\0'; // 如果不是字母,则置空
}
}
str->filtered[len] = '\0'; // 确保字符串结束标记
}
```
3. 输入8个字符串并排序
```c
int main() {
StringFilter strings[8];
for (int i = 0; i < 8; i++) {
input_and_filter(strings + i);
}
// 使用qsort进行排序
qsort(strings, 8, sizeof(StringFilter), compare_strings);
printf("\n排序后的字符串(按字母顺序):\n");
for (int i = 0; i < 8; i++) {
printf("%s -> %s\n", strings[i].original, strings[i].filtered);
}
return 0;
}
// 比较函数,根据字符串内容升序排列
int compare_strings(const void *a, const void *b) {
return strcmp(((StringFilter*)a)->filtered, ((StringFilter*)b)->filtered);
}
```
阅读全文