gpt4 book ai didi

c++ - 从随机单词中删除重复的字符

转载 作者:行者123 更新时间:2023-11-28 00:26:06 26 4
gpt4 key购买 nike

我正在创建一个类来删除随机单词中的重复字符。例如,如果输入是“aabbccddeeff”,它应该输出“abcdef”。但是我的输出在“abcdef”之后包含奇怪的字符。 main.cpp文件已经存在,作为创建类的要求。请看下面的代码:

主.ccp

#include <iostream>
#include "repeatdeletion.h"

using namespace std;

int main()
{
char* noRepeats;
int length;
string s;

cout<<"Enter a random word with repeating characters: ";
cin>>s;

RepeatDeletion d;
length=s.length();
noRepeats=d.deleteRepeats(s, length);

cout<<"Your word without any repeating characters: ";
for (int k=0; k<length; k++){
cout<<noRepeats[k];
}
cout<<endl;

delete [] noRepeats;
noRepeats=NULL;

return 0;
}

重复删除.h

#ifndef REPEATDELETION_H
#define REPEATDELETION_H
#include <iostream>

using namespace std;

class RepeatDeletion
{
char* c;
char arr[128]={};
bool repeated;
bool isRepeated(char);
public:
RepeatDeletion();
~RepeatDeletion();
char* deleteRepeats(string, int);
};

#endif // REPEATDELETION_H

重复删除.cpp

#include "repeatdeletion.h"

RepeatDeletion::RepeatDeletion()
{
repeated=false;
}

RepeatDeletion::~RepeatDeletion()
{
delete [] c;
c=NULL;
}

bool RepeatDeletion::isRepeated(char c){
bool repeated=false;
if (arr[c]>=1){
repeated=true;
arr[c]++;
}else{
arr[c]++;
}
return repeated;
}

char* RepeatDeletion::deleteRepeats(string str, int len){
c=new char[len];
int j=0;
for (int i=0; i<len; i++){
if (isRepeated(str[i])==false){
c[j]=str[i];
j++;
}
}
return c;
}

最佳答案

您的返回字符数组不是空终止的。string的长度函数不包含\0。

你有两个选择

  1. 在返回的字符数组末尾添加null,std::cout 直接char数组(而不是逐个字符)

  2. 输出 char 数组的最终长度,并将其用作范围以逐个字符地打印它

关于c++ - 从随机单词中删除重复的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24989937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com