Технологии

Здравствуйте Написал программу для сортировки ввденных строк по n-ой литере Не сортирует( Я студент первого курса и только начинаю познавать этот язык - вопрос №4992298

#include
#include
#include
#include
using namespace std;

int main()
{
setlocale(LC_ALL, «rus»);
int kol = 0; // Кол-во строк
cout << «Количество строк: »;
cin >> kol; // Ввод кол-ва строк
string *stroka; // Создание динамического массива для строк
stroka = new string[kol];
for (int i = 0; i < kol; i++)
{
cout << i + 1 << "-я строка: ";
cin >> stroka[i];
}
// Заполнение массива
int opr = 0; // Номер определяющего элемента
cout << «Номер определяющего элемента: »;
cin >> opr; // Ввод определяющего элемента
string x = «123»; // Переменная для сортировки «Пузырьком»
for (int j = 0; j < kol; j++) // Нужное кол-во повторений прогонов по строкам
{
for (int i = 0; i < kol — 1; i++) // 1 прогон по строкам
{
if ((stroka[i].length() <= opr) && (stroka[i + 1].length())) // Сравнение строк
{
if (stroka[i][opr — 1] > stroka[i][opr — 1]) // проверка на определяющий элемент
{
x = stroka[i];
stroka[i] = stroka[i + 1];
stroka[i + 1] = x;
// Обмен данными между элементами массива
}
}
}
}
for (int i = 0; i < kol; i++) // Вывод отсортированного списка
{
cout << stroka[i] << '\n';
}
}

декабрь 7, 2022 г.

  • Всего ответов: 1

  • Денис - аватарка

    Денис

    36-й в Психологии

    Здравствуйте!

    В коде, который вы предоставили, есть ошибка в проверке символа определяющего элемента: в условии if (stroka[i][opr — 1] > stroka[i][opr — 1]) вы используете stroka[i][opr — 1] дважды, вместо stroka[i][opr — 1] и stroka[i + 1][opr — 1]. Кроме того, при сравнении символов нужно использовать оператор <, а не >.

    Вот исправленный код:

    #include <iostream>
    #include <string>
    using namespace std;

    int main()
    {
        setlocale(LC_ALL, «rus»);
        int kol = 0; // Кол-во строк
        cout << «Количество строк: »;
        cin >> kol; // Ввод кол-ва строк
        string *stroka; // Создание динамического массива для строк
        stroka = new string[kol];
        for (int i = 0; i < kol; i++)
        {
            cout << i + 1 << "-я строка: ";
            cin >> stroka[i];
        }
        // Заполнение массива
        int opr = 0; // Номер определяющего элемента
        cout << «Номер определяющего элемента: »;
        cin >> opr; // Ввод определяющего элемента
        string x = «123»; // Переменная для сортировки «Пузырьком»
        for (int j = 0; j < kol; j++) // Нужное кол-во повторений прогонов по строкам
        {
            for (int i = 0; i < kol — 1; i++) // 1 прогон по строкам
            {
                if ((stroka[i].length() > opr) && (stroka[i + 1].length() > opr)) // Сравнение строк
                {
                    if (stroka[i][opr — 1] < stroka[i + 1][opr — 1]) // проверка на определяющий элемент
                    {
                        x = stroka[i];
                        stroka[i] = stroka[i + 1];
                        stroka[i + 1] = x;
                        // Обмен данными между элементами массива
                    }
                }
            }
        }
        for (int i = 0; i < kol; i++) // Вывод отсортированного списка
        {
            cout << stroka[i] << '\n';
        }
    }

    Надеюсь, это поможет вам решить проблему с сортировкой строк по определенной литере.

    апрель 13, 2023 г.