从键盘输入一个以回车符为结束标志的字符串,去掉字符串中重复的字符,然后利用冒泡排序法对字符串中的字符按ASCII 码值从小到大排序,并输出排序后的结果(例如,输入47thu9tzzr6hm4d3,输出34679dhmrtuz)。c语言
时间: 2024-12-19 17:23:47 浏览: 18
在C语言中,你可以通过以下几个步骤实现这个功能:
1. **读取输入并存储唯一字符**:
使用`scanf()`函数从键盘读入字符串,同时创建一个布尔数组(如`bool isUnique[128]`),其中`isUnique[i]`表示字符'i'(ASCII码)是否已存在。遍历字符串的同时检查每个字符,如果未出现则将字符添加到结果字符串和更新布尔数组。
```c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
int main() {
char input[100];
scanf("%s", input);
bool isUnique[128] = {false};
char result[100] = "";
int i = 0;
for (char c : input) {
if (!isUnique[c]) {
result[i++] = c;
isUnique[c] = true;
}
}
result[i] = '\0'; // 结束字符串
}
```
2. **冒泡排序字符串中的字符**:
将结果字符串转换成字符数组,然后用冒泡排序算法进行排序。冒泡排序的基本思路是比较相邻两个元素,如果顺序不对就交换它们,直到整个序列有序。
```c
void bubbleSort(char arr[], int n) {
int i, j;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
char temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 修改后的result数组现在包含已去重并排序的字符
bubbleSort(result, strlen(result));
```
3. **输出排序结果**:
最后,打印排序后的字符串。
```c
printf("排序后的结果: %s\n", result);
```
完整程序如下:
```c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
int main() {
char input[100];
scanf("%s", input);
bool isUnique[128] = {false};
char result[100] = "";
int i = 0;
for (char c : input) {
if (!isUnique[c]) {
result[i++] = c;
isUnique[c] = true;
}
}
result[i] = '\0';
bubbleSort(result, strlen(result));
printf("排序后的结果: %s\n", result);
return 0;
}
void bubbleSort(char arr[], int n) {
// ... 冒泡排序代码 ...
}
```
阅读全文