Здравствуйте Написал программу для сортировки ввденных строк по 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';
}
}
07.12.22
1 ответ

Ответы

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

В коде, который вы предоставили, есть ошибка в проверке символа определяющего элемента: в условии 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.04.23
Посмотреть всех экспертов из раздела Технологии > C/C++
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store