用C语言编写一个函数del(s),将输入的字符串s中重复出现的字符删除,只保留最后出现的字符,要求大小写无关(即'A'与'a'视为相同字符)。在main()函数中测试此函数:从键盘输入一个字符串,然后调用该函数进行删除重复字符串操作,将结果打印到屏幕上。
时间: 2024-02-13 16:05:28 浏览: 34
可以使用哈希表来记录每个字符最后出现的位置,然后遍历字符串,如果当前字符已经在哈希表中出现过,且上一次出现的位置在当前位置之前,则说明当前字符是重复出现的字符,需要将其删除。最后将保留下来的字符组成新的字符串即可。
以下是具体实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_LEN 100
void del(char *s) {
int last_pos[26] = {0}; // 哈希表,记录每个字符最后出现的位置
int len = strlen(s);
int i, j;
for (i = 0; i < len; i++) {
char c = tolower(s[i]); // 转换为小写字母
if (last_pos[c - 'a'] > 0 && last_pos[c - 'a'] < i + 1) {
// 如果当前字符已经出现过,且上一次出现的位置在当前位置之前,说明当前字符是重复的,需要删除
for (j = i; j < len - 1; j++) {
s[j] = s[j + 1];
}
s[len - 1] = '\0';
len--;
i--; // 删除后需要回退一步
} else {
last_pos[c - 'a'] = i + 1; // 记录当前字符最后出现的位置
}
}
}
int main() {
char s[MAX_LEN];
printf("Please input a string: ");
fgets(s, MAX_LEN, stdin);
s[strcspn(s, "\n")] = '\0'; // 去掉fgets自动添加的换行符
del(s);
printf("After deleting duplicates: %s\n", s);
return 0;
}
```
使用`fgets`函数读取字符串可以避免因输入字符数超过数组长度而发生的缓冲区溢出问题。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)