用c语言写输入任意长度字符串(最长20个),包括英文、数字、符号(英文字符)三种类型,根据字符类型分别按顺序排列(英文从a(A)到z(Z),数字从0到9,符号按照ASCII码值大小排序),输出排列后结果。
时间: 2024-12-04 09:27:31 浏览: 39
在C语言中,你可以通过以下步骤编写一个程序来实现这个功能:
1. 首先,创建一个函数,用于读取用户输入的字符串,并将其存储在一个动态数组中。由于我们限制了最长20个字符,可以使用`char`类型的数组加上动态内存分配。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义字符类型别名,便于处理
typedef enum {英文字母, 数字, 符号} CharType;
// 动态分配字符串并排序
void sortAndPrint(char** input) {
int len = strlen(*input);
char* sortedStr = (char*)malloc(len * sizeof(char));
// 排序算法(这里简化为冒泡排序)
for (int i = 0; i < len - 1; ++i) {
for (int j = 0; j < len - 1 - i; ++j) {
if (isalpha(*(sortedStr+j)) && islower(*(sortedStr+j))) {
// 英文字符部分从小到大排序
if (*(sortedStr+j+1) < *(sortedStr+j)) {
char temp = *(sortedStr+j);
*(sortedStr+j) = *(sortedStr+j+1);
*(sortedStr+j+1) = temp;
}
} else if (isdigit(*(sortedStr+j))) {
// 数字部分从小到大排序
if (*(sortedStr+j+1) < *(sortedStr+j)) {
char temp = *(sortedStr+j);
*(sortedStr+j) = *(sortedStr+j+1);
*(sortedStr+j+1) = temp;
}
} else if (*(sortedStr+j) > *(sortedStr+j+1)) {
// 符号部分按照ASCII码值排序
char temp = *(sortedStr+j);
*(sortedStr+j) = *(sortedStr+j+1);
*(sortedStr+j+1) = temp;
}
}
}
printf("Sorted string: %s\n", sortedStr);
free(sortedStr); // 释放内存
}
int main() {
char* str = NULL;
printf("Enter a string up to 20 characters: ");
fgets(str, 21, stdin);
str[strlen(str)-1] = '\0'; // 去除fgets留下的换行符
// 调用排序函数
sortAndPrint(&str);
return 0;
}
```
阅读全文