晚上好人,
我正在尝试从字符串中删除重复的字母。我的循环无法正常工作。我的字符串是“ABCBDE”,我想打印“ABCDE”,而是打印“ABCEDD”。订单实际上并不重要,但我需要每个字母只打印一次。有人在我的代码中看到错误吗?
谢谢
#include <stdio.h>
int main()
{
char str1[] = "ABCBDE";
printf("Available: %s\n", str1);
int len1 = strlen(str1);
int i = 0;
int j;
for(i; i < len1; i++){
for(j = i+1; j < len1+1; j++){
if (str1[i] == str1[j]) { // remove duplicated letter
str1 [j] = str1 [len1 - 1]; // replace with last
len1 --; // cut last
}
}
}
printf("Available: %s\n", str1);
return 0;
}
答案 0 :(得分:0)
您的代码背后的逻辑几乎是正确的。关键是要了解j
仅仅是当前字符的索引,将j+N
复制到j
会在AAA
之类的情况下产生相同的字符串。您需要做的是反转if
条件并添加变量以跟踪复制非重复字符的位置。这里有一些代码可以帮助您入门:
for (int i = 0; i < len1; i++) {
// Index var used to track where to copy non-duplicate characters.
int di = i+1;
for (int j = di; j < len1+1; j++) {
if (str1[i] != str1[j]) {
/*
Replace this comment block with your code.
*/
}
}
}
提示:
j
处的字符与i
处的字符不重复,我们可以复制j
处的字符以替换di
处的字符。 di
递增。如果您遇到问题,请尝试使用下面列表中的小字符串遍历代码的每一行。一步步。如有必要,请在纸上。
Start => End
A => A
AA => A
AAA => A
AB => AB
AAB => AB
ABA => AB
ABB => AB
ABC => ABC