如何解决C ++从cstring删除重复项
我有一个看起来像ABBBCACACACBA
的c字符串,我应该创建一个删除重复字符的函数,所以我以ABC
结尾。我创建了一个嵌套的for
循环,用\0
替换与外循环中的字母匹配的每个字母,并增加一个计数器来跟踪重复。我得到-1
作为应记录的重复次数,并通过检查将其吐出ABBC
而不是ABC
。我很困惑,有什么想法吗?
for (int i = 0; i < SIZE; i++)
{
for (int j = i + 1; j < SIZE; j++)
{
if (letter[i] == letter[j])
{
letter[j] = '\0';
repeatCounter++;
}
}
}
解决方法
仅用'\0'
替换重复项是不够的,您实际上必须从字符串中将其删除并向下移动其余字符。尝试类似这样的事情:
int size = SIZE,i = 0;
while (i < size)
{
int j = i + 1;
while (j < size)
{
if (letter[j] == letter[i])
{
for (int k = j + 1; k < size; k++)
{
letter[k-1] = letter[k];
}
letter[--size] = '\0';
repeatCounter++;
continue;
}
j++;
}
i++;
}
,
这是一个简单的示例,可以满足您的需求。它使用std::string
来存储输出。您可以复制n粘贴代码here进行测试和运行。考虑使用std::string
,因为它具有使您的生活变得轻松的功能。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string input("ABBBCACACACBA");
string output;
for(size_t i = 0; i < input.size(); i++)
{
if(output.find(input[i]) == string::npos)
{
output += input[i];
}
}
cout << "Input: " << input << endl;
cout << "Output: " << output << endl;
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。