Сортировка букв в строке по алфавиту без использования встроенной сортировки () - PullRequest
0 голосов
/ 11 февраля 2020

Функция sort должна сортировать буквы в строке. Но БЕЗ использования встроенной функции C ++ sort()! Я пробовал разные методы, но ничего не помогло. Вот аргументы в этой функции. Нужно отсортировать text. (Возможно ли это без удаления & до text?) Этот код переходит в бесконечный l oop.

std::string TextUtility::sort(const std::string &text)
{
    string toSort = text;
    string sorted_str;

    int size = sizeof(toSort) / sizeof(char);

    for (int i = 0; i < size - 1; i++)
    {
        if (toSort[i] > toSort[i + 1])
        {
            int temp = toSort[i + 1];
            toSort[i + 1] = toSort[i];
            toSort[i] = temp;
            i = -1;
        }
    }

    for (int i = 0; i < toSort.size(); i++)
    {
        sorted_str += toSort[i];
    }

    cout << endl
         << "Sorted: " << sorted_str;

    return sorted_str;
}

1 Ответ

0 голосов
/ 11 февраля 2020

После очистки (см. Комментарии) это, кажется, работает нормально.

#include <string>
#include <iostream>

std::string sort(const std::string &text)
{
  std::string toSort = text;

  for (int i = 0; i < (int)(toSort.size()) - 1; i++)
  {
    if (toSort.at(i) > toSort.at(i + 1))
    {
      char temp = toSort.at(i + 1);
      toSort.at(i + 1) = toSort.at(i);
      toSort.at(i) = temp;
      i = -1;
    }
  }

  std::cout << "Sorted: " << toSort << std::endl;

  return toSort;
}

int main()
{
  sort("fgfghafbkgdbGHKGHjbkgfnvnbjb14563f");
  sort("X");
  sort("");
  return(0);
}

Сортировка: 13456GGHHKabbbbbdfffffgggghjjkknnv

Сортировка: X

Сортировка:

Кстати: необходимо явное приведение (int) (toSort.size ()), поскольку пустая строка нарушит условие. По крайней мере, в моей системе это привело бы к «i <size_t (-1)», который вызывает std :: out_of_range. Может быть, что-то в этом роде вызвало у тебя бесконечность?

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