从字符串中删除重复的字符
Deleting Duplicate chars from a string
你好,我是编码的新手,我正在编写一个代码,该代码删除字符串上的任何重复字符。假设输入字符串是ABBA,然后输出应为"空"。由于所有重复项都被删除了。另一个示例是,如果输入字符串是kkccd,则输出应为" d&quot"。由于代码将删除K和C的重复项。我的代码的问题是,当我键入KKCCD时,它会返回KCD,并且并未完全删除重复项。另外,如果我要键入" AA"结果又回来了。而不是"空"。修复我的代码的任何帮助都将被大大关注。谢谢。
包括
#include <string.h>
using namespace std;
string deduplicate(string input){
int i;
int x;
int len= input.length();
string outputStr;
string strEmpty = "Empty";
if (input.length() == 1)
{return input;}
for(i = 0; i<len;i++){
for(x = i+1; x<len; x++){
if(input[i] == input[x]){
input.erase(x,1);
x--;}
}
len = input.length();
}
return outputStr = input;
if (input.length() == 0)
{return strEmpty;}
return outputStr = input;
}
int main()
{
string input;
cout << "Enter a string: " << endl;
cin >> input;
cout << deduplicate(input);
return 0;
}
将重复功能更改为此
string deduplicate(string input){
int i;
int x;
int len= input.length();
string outputStr;
string strEmpty = "Empty";
if (input.length() == 1)
{return input;}
for(i = 0; i<len;i++){
for(x = i+1; x<input.length(); x++){ // This line
if(input[i] == input[x]){
input.erase(x,1);
input.erase(i,1); // and this line
x--;
}
}
len = input.length();
}
return outputStr = input;
if (input.length() == 0)
{return strEmpty;}
return outputStr = input;
}
您确实删除了重复的字符,但不是原始的,因此第二个擦除语句是这样做的。
您正在删除找到的副本,但您永远不会删除原始字符。实现目标的最有效方法是使用STL算法。您可能需要检查以下链接:从字符串(STL)
一般来说,我认为这不是从迭代的字符串中删除字符的好主意。构建输出会更好,更干净:
#include <string>
#include <iostream>
using namespace std;
string deduplicate(string input) {
string outputStr;
if (input.length() == 1) {
return input;
}
for ( int i = 0; i < input.length(); i++ ) {
// try to find character at the rest of the string
if ( input.find( input[i], i+1 ) == string::npos ) {
// try to find character in the front
if ( ( i > 0 ) && ( input.rfind( input[i], i-1 ) == string::npos ) ) {
outputStr += input[i];
}
}
}
return outputStr;
}
int main()
{
string input;
cout << "Enter a string: " << endl;
cin >> input;
cout << deduplicate(input) << endl;
return 0;
}
这是"蛮力"实现。
string deduplicate(string str)
{
size_t l = str.length();
bool bFound = false;
char character = 0;
for (int i = 0; i < l; i++)
{
character = str[i];
while (true)
{
size_t next = str.rfind(character);
if (next != std::string::npos)
{
if (bFound || (!bFound && next != i))
{
str.erase(next, 1);
bFound = true;
l--;
}
}
if (next == i)
{
if (bFound == true)
{
i--;
}
bFound = false;
break;
}
}
}
return str;
}
相关文章:
- 在C++的字符串中搜索和删除某些字符
- 删除/替换C++字符串中的多字符 (ÿû)
- 如何删除字符串中的前 2 个字符(如果它有"-")
- 如何在 getline 中删除/忽略超过特定数字的字符?
- 如何在 c++ 中删除字符串中的某些字符?
- 从双引号括起来的子字符串中删除特定字符
- 如何从字符数组(不是字符串数组)中删除符号
- C++ 从 std::string 中删除所有非数字字符
- xcode 从源代码中删除奇怪的控制字符
- C++从句子中删除给定字符的程序不起作用
- 正在从C++中的字符数组中删除字符
- 如何检查字符串中的最后一个字符是否是某个字符并将其从字符串中删除?(C++)
- C++从字符末尾删除值
- 从字符数组中删除双空格
- 循环以从字符数组中删除过多的空格 (C++)
- 如何删除新分配的字符,这也是函数返回值?
- 删除字符串向量中的字符重复
- 将一个字符替换为字符串中更多数量的字符,而不删除C++中的其他字母
- 删除以前打印的字符
- 回文查找器:非字母数字字符删除问题