1.编写函数 fun,输入参数: 一串字符串和变量a,对长度为n个字符的字符串, 除开头a个字符和结尾a个字符外, 将其余剩下个字符按 ascii码降序排列。用c语言
时间: 2024-09-16 21:05:39 浏览: 68
在C语言中,我们可以编写一个函数`fun`来实现这个需求。首先,我们需要截取中间部分,然后将其转换为ASCII值,排序,再转换回原始字符,并插入到原始字符串中。以下是一个详细的步骤:
```c
#include <stdio.h>
#include <string.h>
#include <ctype.h> // 包含ascii相关的函数
// 函数声明
void sort_string(char* str, int a);
int main() {
char str[100];
int a;
// 用户输入字符串和变量a
printf("Enter the string and the number of characters to exclude from ends: ");
fgets(str, sizeof(str), stdin); // 不包括换行符
str[strcspn(str, "\n")] = '\0'; // 去除fgets带来的换行符
scanf("%d", &a);
sort_string(str, a);
printf("Sorted string: %s\n", str);
return 0;
}
// 主函数处理的核心排序函数
void sort_string(char* str, int a) {
int n = strlen(str) - 2 * a; // 中间字符数
if (n <= 0) {
printf("No characters left to sort after exclusion.\n");
return;
}
char middle[n]; // 截取中间部分
strncpy(middle, str + a, n); // 把中间部分复制到middle
middle[n] = '\0';
for (int i = 0; i < n - 1; ++i) {
for (int j = 0; j < n - i - 1; ++j) {
if (ascii_sort(middle[j]) > ascii_sort(middle[j + 1])) {
// 交换ASCII值较大的字符
char temp = middle[j];
middle[j] = middle[j + 1];
middle[j + 1] = temp;
}
}
}
// 将排序后的中间部分合并回原字符串
memmove(str + a, middle, n);
str[strlen(str)] = '\0'; // 更新字符串长度
}
// 自定义ASCII排序辅助函数
int ascii_sort(char c) {
if (!isalpha(c)) { // 如果不是字母,则保持原样
return c;
}
return c - 'a'; // ASCII值,小写字母从'a'开始计数
}
```
注意:上述代码假设输入的字符串只包含小写字母。如果包含大写字母或其他字符,可能需要进一步调整`ascii_sort`函数。
阅读全文