用C语言编写一个函数del(s),将输入的字符串s中重复出现的字符删除,只保留最后出现的字符,要求大小写无关(即'A'与'a'视为相同字符)。在main()函数中测试此函数:从键盘输入一个字符串,然后调用该函数进行删除重复字符串操作,将结果打印到屏幕上。是要删除前面出现的保留后面的
时间: 2024-02-13 07:05:31 浏览: 65
C语言程序设计-从字符串s中删除指定的字符c.c
5星 · 资源好评率100%
好的,那么稍微修改一下之前的代码就可以实现删除前面出现的字符,只保留后面出现的字符了。具体来说,对于每个字符,如果其在哈希表中已经出现过,则将其从字符串中删除,否则将其加入哈希表中。
以下是修改后的代码:
```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) {
// 如果当前字符已经出现过,则将其从字符串中删除
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;
}
```
例如,输入字符串为`Hello, world!`,则输出结果为`Helo, wrd!`,保留了最后出现的字符`o`、`,`和`d`。
阅读全文