1. 字符串中字符排序 【问题描述】 编写一个程序,从键盘接收一个字符串,然后按照字符顺序从小到大进行排序,并删除重复的字符。 【输入形式】 用户在第一行输入一个字符串。 【输出形式】 程序按照字符(ASCII)顺序从小到大排序字符串,并删除重复的字符进行输出。c语言
时间: 2024-12-20 18:23:53 浏览: 10
在C语言中,你可以通过以下几个步骤实现这个功能:
1. **获取用户输入**:
使用`scanf`函数从标准输入读取字符串。
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
printf("请输入一个字符串: ");
fgets(str, sizeof(str), stdin); // fgets处理换行符
```
2. **删除末尾的换行符**:
使用`strcspn`函数找到换行符的位置并移除它。
```c
size_t len = strlen(str);
if (str[len - 1] == '\n') {
str[len - 1] = '\0'; // 删除换行符
}
```
3. **字符排序**:
使用`qsort`函数对字符串中的字符进行排序,这里我们需要自定义比较函数,比如`strcmp`或将字符转换成整数进行比较。
```c
int compare(const void *a, const void *b) {
return *(char*)a - *(char*)b;
}
qsort(str, len, sizeof(char), compare);
```
4. **去重**:
创建一个新的数组来存储排序后的无重复字符,遍历原字符串,只添加不同的字符。
```c
int unique[] = {0};
for (size_t i = 0; i < len; ++i) {
int found = 0;
for (size_t j = 0; j < i && !found; ++j) {
if (str[i] == unique[j]) {
found = 1;
}
}
if (!found) {
unique[j + 1] = str[i]; // 找到新位置插入
}
}
unique[j + 1] = '\0'; // 添加结束符
```
5. **输出结果**:
最后打印出排序并去重后的字符串。
```c
printf("排序并去重后的字符串: %s\n", unique);
return 0;
}
```
阅读全文