C++ 从随机单词中删除重复字符
我正在制作一个类来删除随机单词中的重复字符。例如,如果输入为“aabbccddeeff”,则应输出“abcdef”。但是,我的输出在“abcdef”之后包含奇怪的字符。main.cpp文件已作为创建类的要求存在。请参阅以下代码: main.ccpC++ 从随机单词中删除重复字符,c++,C++,我正在制作一个类来删除随机单词中的重复字符。例如,如果输入为“aabbccddeeff”,则应输出“abcdef”。但是,我的输出在“abcdef”之后包含奇怪的字符。main.cpp文件已作为创建类的要求存在。请参阅以下代码: main.ccp #include <iostream> #include "repeatdeletion.h" using namespace std; int main() { char* noRepeats; int length;
#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;
}
#包括
#包括“repeatdelection.h”
使用名称空间std;
int main()
{
char*noRepeats;
整数长度;
字符串s;
沙发;
重复删除;
长度=s.长度();
noRepeats=d.deleteRepeats(s,长度);
cout如果要使用C字符串数组,它们的结尾有一个空终止符。这意味着您需要(在deleteRepeats
中)将字符数组定义为比长度大一个字符:
c=new char[len+1];
并且,在for
循环之后,确保将空终止符放入:
c[j] = '\0';
然后,在调用函数中,您只需执行以下操作:
cout << noRepeats;
cout如果要使用C字符串数组,它们的末尾有一个空终止符。这意味着您需要(在deleteRepeats
中)将字符数组定义为比长度大一个字符:
c=new char[len+1];
并且,在for
循环之后,确保将空终止符放入:
c[j] = '\0';
然后,在调用函数中,您只需执行以下操作:
cout << noRepeats;
cout如果要使用C字符串数组,它们的末尾有一个空终止符。这意味着您需要(在deleteRepeats
中)将字符数组定义为比长度大一个字符:
c=new char[len+1];
并且,在for
循环之后,确保将空终止符放入:
c[j] = '\0';
然后,在调用函数中,您只需执行以下操作:
cout << noRepeats;
cout如果要使用C字符串数组,它们的末尾有一个空终止符。这意味着您需要(在deleteRepeats
中)将字符数组定义为比长度大一个字符:
c=new char[len+1];
并且,在for
循环之后,确保将空终止符放入:
c[j] = '\0';
然后,在调用函数中,您只需执行以下操作:
cout << noRepeats;
cout您的返回字符数组不是以null结尾的。
字符串的长度函数不包括\0
你有两个选择
在返回的字符数组末尾添加null,std::cout直接返回字符数组(而不是逐字符)
输出字符数组的最终长度,并使用该范围逐字符打印
返回字符数组不是以null结尾的。
字符串的长度函数不包括\0
你有两个选择
在返回的字符数组末尾添加null,std::cout直接返回字符数组(而不是逐字符)
输出字符数组的最终长度,并使用该范围逐字符打印
返回字符数组不是以null结尾的。
字符串的长度函数不包括\0
你有两个选择
在返回的字符数组末尾添加null,std::cout直接返回字符数组(而不是逐字符)
输出字符数组的最终长度,并使用该范围逐字符打印
返回字符数组不是以null结尾的。
字符串的长度函数不包括\0
你有两个选择
在返回的字符数组末尾添加null,std::cout直接返回字符数组(而不是逐字符)
输出字符数组的最终长度,并使用该范围逐字符打印
打印循环使用旧的未修改的字符串长度循环。这意味着您将超出添加到deleteRepeats
返回的内存中的字符
处理此问题的最简单解决方案是将数据作为正确的字符串终止,并检查循环中的终止符。打印循环使用旧的未修改的字符串长度进行循环。这意味着您将超出添加到deleteRepeats
返回的内存中的字符
for(k=0;k<length;k++)
处理此问题的最简单解决方案是将数据作为正确的字符串终止,并检查循环中的终止符。打印循环使用旧的未修改的字符串长度进行循环。这意味着您将超出添加到deleteRepeats
返回的内存中的字符
for(k=0;k<length;k++)
处理此问题的最简单解决方案是将数据作为正确的字符串终止,并检查循环中的终止符。打印循环使用旧的未修改的字符串长度进行循环。这意味着您将超出添加到deleteRepeats
返回的内存中的字符
for(k=0;k<length;k++)
处理此问题的最简单解决方案是将数据作为正确的字符串终止,并检查循环中的终止符
for(k=0;k<length;k++)
也应该返回后面的长度
也应该返回后面的长度
也应该返回后面的长度
应该在too之后返回长度,这是因为在代码中您编写了以下内容:
cout<<"Your word without any repeating characters: ";
for (int k=0; k<length; k++){
cout<<noRepeats[k];
}
cout<<endl;
C样式字符串(char*
,如果您坚持的话)遵循最后一个字符是'\0'
,表示字符串结束的约定。您还可以通过追加'\0'
来更改删除重复次数
char* RepeatDeletion::deleteRepeats(string str){
c = new char[str.size() + 1];
int j = 0;
for (int i = 0; i < str.size(); i++){
if(isRepeated(str[i]) == false){
c[j] = str[i];
j++;
}
}
c[j] = '\0';
return c;
}
char*repeatdelection::deleteRepeats(字符串str){
c=新字符[str.size()+1];
int j=0;
对于(int i=0;i
在你的主要
std::cout << noRepeats << std::endl;
std::cout这是因为您在代码中编写了以下内容:
cout<<"Your word without any repeating characters: ";
for (int k=0; k<length; k++){
cout<<noRepeats[k];
}
cout<<endl;
C样式字符串(char*
,如果您坚持的话)遵循最后一个字符是'\0'
,表示字符串结束的约定。您还可以通过追加'\0'
来更改删除重复次数
char* RepeatDeletion::deleteRepeats(string str){
c = new char[str.size() + 1];
int j = 0;
for (int i = 0; i < str.size(); i++){
if(isRepeated(str[i]) == false){
c[j] = str[i];
j++;
}
}
c[j] = '\0';
return c;
}
char*repeatdelection::deleteRepeats(字符串str){
c=新字符[str.si]