Программа которая принимает строки в двумерный динамический 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
// Вам просто надо сбросить буфер после считывания N - например, так
cin.ignore(MAX_STRING_LEN, '\n');
Вот проверка для ввода, не для сортировки
https://ideone.com/jW1Ano
#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
#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
Похожие вопросы
- Нужна помощь, Помогите перебрать массив и нули перенести в конец С++
- Нужен алгоритм перебора массива.
- Delphi помощь с массивами
- Двумерный массив/Турбо паскаль/нужна помощь=( А(12)Заменить отрицательные элементы стоящие на чётных местах цифрой 8.
- Нужна помощь по информатике.
- Нужна помощь с паскалем!
- Программисты,нужна помощь,пожалуйста Для вас легко
- Логика. Нужна помощь.
- Нужна помощь
- Информатика!Нужна помощь!если можно,с объяснением.