C++ 从随机单词中删除重复字符

C++ 从随机单词中删除重复字符,c++,C++,我正在制作一个类来删除随机单词中的重复字符。例如,如果输入为“aabbccddeeff”,则应输出“abcdef”。但是,我的输出在“abcdef”之后包含奇怪的字符。main.cpp文件已作为创建类的要求存在。请参阅以下代码: main.ccp #include <iostream> #include "repeatdeletion.h" using namespace std; int main() { char* noRepeats; int length;

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

main.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;
}
#包括
#包括“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]