C++ 是否从字符串数组中删除相邻的重复字符串?

C++ 是否从字符串数组中删除相邻的重复字符串?,c++,arrays,string,duplicates,C++,Arrays,String,Duplicates,这是我写的文本文件: this is the first line this is the first line this is the second line this is the second line this is the second line this is the third line this is the first line 我试图删除相邻的重复字符串,因此输出为: this is the first line this is the second line this i

这是我写的文本文件:

this is the first line
this is the first line
this is the second line
this is the second line
this is the second line
this is the third line
this is the first line
我试图删除相邻的重复字符串,因此输出为:

this is the first line
this is the second line
this is the third line
this is the first line
这是我到目前为止写的:

for(int i = 0; i < n; i++)
getline(infile,arr[i]);

for(int i=0; i<n; i++)
{
        int j = i+1;
        if(arr[i] == arr[j])
        {
                for(int k = i; k<n; k++)
                arr[k] = arr[k+1];
                n--;
        }
}
如何解决这个问题? 附言:它必须迭代求解,这就是为什么我要这样做。

使用

使用

for(int i=0;i
用于(int i=0;i
如果同一行中有两个以上的重复项,则会出现问题。在您的情况下,这会导致问题

this is the second line
this is the second line
this is the second line
问题是,您只需使用下一个元素对该行进行一次重复数据消除

例如: 如果您有4行,其中第1、2、3行是重复的,您将:

  • 将1与2进行比较,然后删除2,将数组压缩为1,3

  • 不要将1与3进行比较,而是将3与4进行比较(错误)

  • 为了修复您的解决方案,您需要确保不增加
    i
    ,直到它与下一个元素
    i+1
    不匹配

    i = 0;
    while (i < n)
    {
        int j = i+1;
        if(arr[i] == arr[j])
        {
            for(int k = i; k<n; k++)
            {
                arr[k] = arr[k+1];
            }
            n--;
        }
        else
        {
            i++;
        }
    }
    
    i=0;
    而(i对于(int k=i;k当同一行有两个以上的重复项时,就会出现问题。在您的情况下,这会导致问题

    this is the second line
    this is the second line
    this is the second line
    
    问题是,您只需使用下一个元素对该行进行一次重复数据消除

    例如: 如果您有4行,其中第1、2、3行是重复的,您将:

  • 将1与2进行比较,然后删除2,将数组压缩为1,3

  • 不要将1与3进行比较,而是将3与4进行比较(错误)

  • 为了修复您的解决方案,您需要确保不增加
    i
    ,直到它与下一个元素
    i+1
    不匹配

    i = 0;
    while (i < n)
    {
        int j = i+1;
        if(arr[i] == arr[j])
        {
            for(int k = i; k<n; k++)
            {
                arr[k] = arr[k+1];
            }
            n--;
        }
        else
        {
            i++;
        }
    }
    
    i=0;
    而(i对于(int k=i;k什么是
    arr
    ?解决此类问题的正确工具是调试器。在询问堆栈溢出问题之前,您应该逐行检查代码。有关更多帮助,请阅读。至少,您应该[编辑]您的问题将包括一个重现您的问题的示例,以及您在调试器中所做的观察。它是一个字符串数组。所有问题都必须以迭代方式解决,我不能使用任何预先存在的函数或递归:{我对计算机科学相当陌生,并且真的很难解决这个问题。你说的调试器是指编译器吗?我已经做了一段时间了,我想我真的需要一些帮助。你的问题发生在你需要重复删除字符串两次以上的时候,所以在你的例子中它发生是因为“第二行”重复3次。请尝试在一张纸上手动跟踪代码,并查看其工作不正常的原因。
    arr
    的类型是什么?解决此类问题的正确工具是调试器。在询问堆栈溢出之前,您应该逐行检查代码。有关更多帮助,请阅读。至少,您应该[编辑]您的问题将包括一个重现您的问题的示例,以及您在调试器中所做的观察。它是一个字符串数组。所有问题都必须以迭代方式解决,我不能使用任何预先存在的函数或递归:{我对计算机科学相当陌生,并且真的很难解决这个问题。你说的调试器是指编译器吗?我已经做了一段时间了,我想我真的需要一些帮助。你的问题发生在你需要重复删除字符串两次以上的时候,所以在你的例子中它发生是因为“第二行”重复3次。试着在一张纸上手动跟踪代码,看看它为什么不能正常工作。抱歉,我应该提到,我不能使用它。我必须迭代。这就是为什么我尝试这样做,我也不能使用递归。抱歉,我应该提到,我不能使用它。我必须迭代。这就是我为什么要这样做我试着这样做,我也不能使用递归。
    new_array[]=original_array[i];
    这根本不会编译。Hii Friend,在那一行中,我只想告诉你,把旧值放到new array中……代码不是为任何特定语言编写的……它只是一个逻辑……
    new_array[]=original_array[i]
    这根本无法编译。嗨,朋友,在那一行中,我只想告诉你,把旧值放到新数组中……代码不是为任何特定语言编写的……它只是一个逻辑。。。
    i = 0;
    while (i < n)
    {
        int j = i+1;
        if(arr[i] == arr[j])
        {
            for(int k = i; k<n; k++)
            {
                arr[k] = arr[k+1];
            }
            n--;
        }
        else
        {
            i++;
        }
    }