C语言删除字符串重复的字母
时间: 2024-10-29 14:11:24 浏览: 60
在C语言中,删除字符串中的重复字母通常需要遍历字符串,并利用额外的数据结构如字符数组或者哈希表来跟踪已经遇到过的字符。下面是一个简单的示例,演示如何遍历字符串并删除重复的字母:
```c
#include <stdio.h>
#include <string.h>
// 函数声明
void removeDuplicates(char* str);
int main() {
char str[] = "hello world";
printf("Original string: %s\n", str);
removeDuplicates(str);
printf("String with duplicates removed: %s\n", str);
return 0;
}
// 删除字符串重复字母的函数
void removeDuplicates(char* str) {
int i, j;
for (i = 0, j = 0; str[i] != '\0'; ++i) {
if (str[i] != str[j]) { // 如果当前字符未见过,则添加到结果字符串
str[++j] = str[i];
}
}
str[j] = '\0'; // 结束字符串
}
相关问题
请帮我写一个c语言代码,要求是:请输入两串字符串,然后比较两串字符串的大小,并返回两串字符串长度,同时对第一串字符串的重复字母删除,然后将第二串字符串连接到第一穿的后面并输出
当然可以。这是一个简单的 C 语言程序,实现了输入两个字符串、比较长度、删除重复字符以及合并的功能:
```c
#include <stdio.h>
#include <string.h>
// 函数用于删除字符串中的重复字符
void remove_duplicates(char *str) {
int len = strlen(str);
if (len <= 1)
return;
int i, j, temp[256] = {0}; // 使用 ASCII 码值存储字符是否出现过
for (i = 0; str[i]; ++i) {
char c = str[i];
if (!temp[c])
printf("%c", c), temp[c] = 1;
}
}
int main() {
char str1[100], str2[100];
printf("请输入第一个字符串: ");
fgets(str1, sizeof(str1), stdin); // 防止换行符
str1[strlen(str1) - 1] = '\0'; // 删除fgets添加的换行符
printf("请输入第二个字符串: ");
fgets(str2, sizeof(str2), stdin); // 同理处理换行符
int length1 = strlen(str1);
int length2 = strlen(str2);
printf("第一个字符串长度: %d\n", length1);
printf("删除重复字符后的第一个字符串: %s\n", str1);
remove_duplicates(str1);
printf("合并后的字符串: %s%s\n", str1, str2);
return 0;
}
```
这个程序首先读取两个字符串,计算并打印它们的长度。然后删除 `str1` 中的重复字符,并显示结果。最后,它将 `str2` 连接到 `str1` 的末尾并输出。
用c语言 给出由小写字母组成的字符串S(长度不超过80),重复项删除操作会选择两个相邻且相同的字母,并删除它们。在S上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
在C语言中,你可以通过遍历字符串并利用数组或字符指针来实现这个功能。以下是一个简单的步骤描述:
1. 定义一个函数,接收一个字符串`S`作为输入参数,例如`char str[81]`。
2. 创建一个新的字符串`result`,用于存储去重后的字符串,初始长度设为`strlen(S)`,以便容纳可能的所有字符。
3. 使用一个循环,从第一个字符开始遍历`str`:
a. 检查当前字符是否等于下一个字符,如果是,则跳过它并将指向下一个字符的指针后移一位。
b. 如果不是,将当前字符复制到`result`中,并更新`result`的指针。
4. 遍历结束后,`result`中的字符已经按照要求进行了去重处理。需要检查`result`是否已达到最大长度,如果还有空间,说明可能存在未处理的字符对,这是因为最后的字符可能没有找到与其匹配的前一个字符。在这种情况下,再次检查`result`的最后一个字符和倒数第二个字符,然后相应地更新结果。
5. 最终,`result`就是去重后的字符串,返回`result`即可。注意,在C语言中,由于字符串常量结束于'\0',所以在复制过程中不需要额外添加`\0`。
```c
#include <stdio.h>
#include <string.h>
char* removeDuplicates(char str[]) {
int len = strlen(str);
char result[len];
int i, j;
for (i = 0, j = 0; i < len - 1 && str[i] != '\0'; i++) {
if (str[i] != str[i + 1]) {
result[j++] = str[i];
}
}
// 处理可能存在的最后一个字符
if (str[i] != '\0') {
result[j] = str[i];
j++;
}
result[j] = '\0';
return result;
}
int main() {
char S[] = "abbcccdddd";
char* result = removeDuplicates(S);
printf("去除重复后的字符串: %s\n", result);
free(result); // 释放内存
return 0;
}
```
阅读全文
相关推荐
















