首页 > 解决方案 > 删除重复的字符串元素 C++

问题描述

该问题包括使用 n 个数字中的 k 个查找所有排列。我能够找到所有排列,但我正在努力尝试删除重复项。我可以成功地比较并找到重复项,但删除它们是我正在努力做的事情。我有一种感觉,我错过了一些简单的东西,但我不知道它是什么。

任何帮助将不胜感激。我已经盯着这个看了一个星期。

这是我现在得到的代码。

void getPermutations(int n, int k)
{
    string str = "";

    //fill string with numbers <= n
    for(int i = 0; i < n; i++)
    {
        str += to_string(i);  //convert numbers to string
    }

    string tempStr = "";
    string outputStr = "";

    do {
        tempStr = str.substr(0, k);
        int compareResult = tempStr.compare(0, k, outputStr, 0, k);

        if (compareResult == 0)
        {
            cout << "| same | ";
            outputStr.erase(k,k);

        }

        outputStr = tempStr;
        cout << outputStr << " ";
    } while (next_permutation(str.begin(), str.end()));
}

标签: stringc++11comparestring-comparisonerase

解决方案


  1. 我认为你的意思是删除tempStr 的内容,而不是 outputStr。
  2. 擦除的调用并不完全正确。它的第一个参数标记擦除的起始位置,第二个参数告诉要擦除多少个字符。所以如果你想擦除整个字符串,第一个参数应该是......
  3. 您实际上不必删除任何内容。在您按照自己的方式工作后,请尝试在不擦除的情况下进行操作!

祝你好运!


推荐阅读