Удалить повторяющиеся строковые элементы C ++ - PullRequest
0 голосов
/ 30 сентября 2018

Проблема состоит в том, чтобы найти все перестановки, используя k из n цифр.Я могу найти все перестановки, но я изо всех сил пытаюсь стереть дубликаты.Я могу успешно сравнить и найти дубликаты, но я изо всех сил пытаюсь их стереть.У меня такое чувство, что я упускаю что-то простое, но я не знаю, что это такое.

Любая помощь будет принята с благодарностью.Я смотрю на это уже неделю.

Вот код, который я получил прямо сейчас.

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()));
}

1 Ответ

0 голосов
/ 02 октября 2018
  1. Я думаю, вы хотели стереть содержимое tempStr, а не outputStr.
  2. Вызов стереть не совсем правильный,Его первый аргумент отмечает начальную позицию вашего стирания, а второй аргумент сообщает, сколько символов стереть.Поэтому, если вы хотите стереть всю строку, первый аргумент должен быть ...
  3. На самом деле вам не нужно ничего удалять.После того, как вы добьетесь успеха, попробуйте сделать это без стирания!

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...