Другие языки программирования и технологии

Нужна помощь с массивом с++

Программа которая принимает строки в двумерный динамический char массив и сортирует их в алфавитном порядке. Но у меня возникло 2 проблемы: 1.) программа почему-то всегда принимает на 1 строку меньше чем было указано пользователем. 2.) Она сортирует в обратном порядке (т. е. не А, В, С а С, В, А)

#include "stdafx.h"
#include "iostream"
#include "string"

using namespace std;

int main() {

int COUNT_OF_STRINGS;
cout << "Please, write the count of strings: ";
cin >> COUNT_OF_STRINGS;

const int MAX_STRING_LEN = 1000;

char temp[MAX_STRING_LEN] = {};

char *S[MAX_STRING_LEN] = {};

for (int i = 0; i < COUNT_OF_STRINGS; i++) {
S[i] = new char[MAX_STRING_LEN];
}

cout << "Please, write " << COUNT_OF_STRINGS << " strings: " << '\n';
for (int i = 0; i < COUNT_OF_STRINGS; i++)
{
cin.getline(S[i], MAX_STRING_LEN);
}

for (int i = 1; i < COUNT_OF_STRINGS; i++)
{
for (int j = 0; j < COUNT_OF_STRINGS - 1; j++)
{
if (strcmp(S[i], S[j]) > 0)
{
strcpy(temp, S[i]);
strcpy(S[i], S[j]);
strcpy(S[j], temp);
}
}
}

cout << '\n';

for (int i = 0; i < COUNT_OF_STRINGS; i++)
{
cout << S[i] << '\n';
}

for (int i = 0; i < MAX_STRING_LEN; i++)
{
delete[]S[i];
}

_gettch();
return 0;
}
// После считывания COUNT_OF_STRINGS в буфере остается символ перевода строки.
// Вам просто надо сбросить буфер после считывания N - например, так
cin.ignore(MAX_STRING_LEN, '\n');

Вот проверка для ввода, не для сортировки
https://ideone.com/jW1Ano
Гильмутдинов Зимфир
Гильмутдинов Зимфир
81 870
Лучший ответ
#include "stdafx.h"
#include
#include

using namespace std;

int main() {

int COUNT_OF_STRINGS;
cout << "Please, write the count of strings: ";
cin >> COUNT_OF_STRINGS;

const int MAX_STRING_LEN = 1000;

string temp;

string S[COUNT_OF_STRINGS];

cout << "Please, write " << COUNT_OF_STRINGS << " strings: " << '\n';
for (int i = 0; i < COUNT_OF_STRINGS; i++) {
std::cin >> S[i];
}

for (int i = 0; i < COUNT_OF_STRINGS - 1; ++i) {
for (int j = i; j < COUNT_OF_STRINGS; ++j) {
if (S[j] > S[j + 1]) {
temp = S[j];
S[j] = S[j + 1];
S[j + 1] = temp;
}
}
}

cout << '\n';

for (int i = 0; i < COUNT_OF_STRINGS; i++) {
cout << S[i] << '\n';
}

_gettch();
return 0;
}
Ну а теперь прокомментирую. getline считывает все до перевода строки, после того как вы ввели число строк и нажали enter то сработает и getline, так как там остался несчитанный перевод строк, в вашем алгоритме строка с индексом i оказывается правее строки с индексом j, а вы как раз меняете эти две строки, если j больше, значит вы двигаете его вправо. Если что-то будет не понятно пишите мне на почту potenkog@gmail.com