Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/29: Рейтинг темы: голосов - 29, средняя оценка - 4.66
 Аватар для Luna17
3 / 2 / 1
Регистрация: 09.03.2010
Сообщений: 95

Cортировка символьного двумерного массива по алфавиту

09.03.2010, 01:02. Показов 6031. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
// сtroku.cpp: определяет точку входа для консольного приложения.
//
Задание: вести с клавиатуры список фамилий ( в каждой строке по 1ой фамилии) и отсортироавть чтоб они шли в алфавитном порядке,
помогите, не могу понять где ошиблась, причем конкретно


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "stdafx.h"
#include "string.h"
#include "stdio.h"
#include "locale.h"
 
int _tmain(int argc, _TCHAR* argv[])
{    
    setlocale (LC_ALL, "Russian");
     const  int k=4;
     int  i ;
     char mas[k][20], n[20] ;
     for (i=0; i<k; i++)
     {
     printf ("Введите фамилию mas[%d][20]=", i);
     scanf("%d", mas[k][20]);
     }
     printf ("\n");
     for (i=0; i<k; i++)
         gets (mas[i][20]);
     
     if (strcmp(mas[i][20], mas[i+1][20]>0)
             strcpy (n[20], mas[i+1][20]);
             strcpy (mas[i][20], mas[i+1][20]);
             strcpy (mas[i+1][20], n[20]);
        
     printf ("список фамилий отсортирован по алфавиту:");
     printf ("\n");
    
      return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.03.2010, 01:02
Ответы с готовыми решениями:

Сортировка символьного массива по алфавиту
Заданы два символьных массива, заполненных строчными латинскими буквами. Объединить их в один массив так, чтобы все буквы оказались...

Заполнение двумерного символьного массива
Задача №2 Дано нечетное число n, не превосходящее 15. Создайте двумерный массив из n×n элементов, заполнив его символами...

Заполнение символьного двумерного массива
Мне нужно создать примерно такой массив: {&quot;Брюпирийс 4000 Аосква &quot;, &quot;Москва 500 Гитер &quot;, &quot;Вурманск 900 Буга ...

10
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
09.03.2010, 04:18
  1. В 21 строчке забыла ")" перед ">0"
  2. Строки 14-24: ты здесь работаешь не со строкой, как нужно, а с отдельным символом, причем выходишь за границы массива (mas[i][20], тогда как второй индекс может принимать значения от 0 до 19). Здесь вместо отдельного символа нужно задавать строку mas[i], например
    C++
    1
    
    strcmp(mas[i], mas[i+1])
  3. Строки 22-24, надо поместить в фигурные скобки
  4. Вообще у тебя напутано с циклами for. Вот рабочий код:
    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    #include <iostream>
    #include <string>
     
    int main()
    {
        setlocale (LC_ALL, "Russian");
            const  int k=4;
            char mas[k][20], n[20];
        for (size_t i=0; i<k; i++)
        {
            std::cout << "Введите mas[" << i << "]: ";
            std::cin >> mas[i];
        }
            for(size_t i=0; i<k-1; ++i)  
            if (strcmp(mas[i], mas[i+1])>0)
            {
                strcpy (n, mas[i+1]);
                strcpy (mas[i], mas[i+1]);
                strcpy (mas[i+1], n);
            }
     
        std::cout << "Отсортированный массив" << std::endl;
     
        for(size_t i=0; i<k; ++i, std::cout << std::endl)
            std::cout << mas[i];
        system("pause");
        return EXIT_SUCCESS;
    }
  5. Кстати, setlocale() позволит тебе, конечно, вывести строки в кириллице, но если ты попробуешь ввести русские буквы в строку, то при выводе этой строки будет не русский текст, а "кракозябры" (это справедливо, конечно, если ты в винде работаешь)
  6. Вот пример с использование контейнеров и алгоритмов STL:
    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    #include <iostream>
    #include <vector>
    #include <string>
    #include <algorithm>
    #include <iterator>
    #include <functional>
     
    int main()
    {
        setlocale (LC_ALL, "Russian");
        std::vector<std::string> v;
        std::string temp;
        //Ввод продолжается до тех пор, пока не нажмешь "Ctrl+Z", потом "Enter"
        while(std::getline(std::cin, temp))
            v.push_back(temp);
     
        //Сортировка в алфавитном порядке
        std::cout << "Сортировка в алфавитном порядке:" << std::endl;
        std::sort(v.begin(), v.end());
        //Вывод отсортированного массива
        std::copy(v.begin(), v.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
        std::cout << std::endl;
        //Сортировка в обратном порядке
        std::cout << "Сортировка в обратном порядке:" << std::endl;
        std::sort(v.begin(), v.end(), std::greater<std::string>());
        //Вывод отсортированного массива
        std::copy(v.begin(), v.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
        system("pause");
        return EXIT_SUCCESS;
    }
0
 Аватар для Luna17
3 / 2 / 1
Регистрация: 09.03.2010
Сообщений: 95
09.03.2010, 08:51  [ТС]
у ми по твоей проге выдает 22 ошибки, не знаю почему,
я попробовала на основе того что ты дал поредоктировать первоначальный вариант, там одна ошибка мож посмотреть?

ошибка С2296: недопустимо, левый операнд имеет тип "const char [21]"

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// сtroku.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "string.h"
#include "stdio.h"
#include "locale.h"
 
int _tmain(int argc, _TCHAR* argv[])
{    
    setlocale (LC_ALL, "Russian");
     const  int k=4;
     int  i ;
     char mas[k][20], n[20] ;
     for (i=0; i<k; i++)
     {
     printf ("Введите фамилию mas[" << i << "]:");
     scanf("%d", mas[i]);
     }
     for (i=0; i<(k-1); i++)
        if (strcmp(mas[i], mas[i+1])>0)
        {
             strcpy (n, mas[i+1]);
             strcpy (mas[i], mas[i+1]);
             strcpy (mas[i+1], n);
        }  
     printf ("%s","список фамилий отсортирован по алфавиту:");
     for (i=0; i<(k-1); i++)
      puts(mas[i]);
      return 0;
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
09.03.2010, 09:09
Luna17, программа, которую Вам написал Nameless One, прекрасно работает, но только если в ней ничего не менять...

А вот у Вас - мало того, что программа на С написана, так ещё и с ошибками...
Например:
Цитата Сообщение от Luna17 Посмотреть сообщение
C++
1
2
3
4
5
6
7
...
char mas[k][20], n[20] ; 
for (i=0; i<k; i++) 
{ printf ("Введите фамилию mas[" << i << "]:"); 
  scanf("%d", mas[i]); // прочитать целое число и занести его в массив строк?
}
...
Может Вам именно на С и надо?
0
 Аватар для Luna17
3 / 2 / 1
Регистрация: 09.03.2010
Сообщений: 95
09.03.2010, 09:26  [ТС]
мне нужна прога на С++. точнее назв проги Visual C++
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
09.03.2010, 09:27
17-18 строки ошибка (не надо пробовать совмещать потоки С++ и функции вывода С), в форматной строке нужно указывать правильный спецификатор
C++
1
2
printf ("Введите фамилию mas%d\t", i);
         scanf("%s", mas[i]);
В 27 строке спецификатор типа не имеет смысла.
28 строка - неправильно задан цикл, надо так
C++
1
for (i=0; i<k; i++)
И да - Ваш алгоритм сортировки, как и мой первый вариант решения, неверен, так как в результате прохода по массиву строк будут меняться местами только соседние строки (зато второй работает)
0
 Аватар для Luna17
3 / 2 / 1
Регистрация: 09.03.2010
Сообщений: 95
09.03.2010, 09:27  [ТС]
Уменя ввод элементов, проходит нормально, а выводит комп какие то непонятные символы
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
09.03.2010, 09:30
Цитата Сообщение от Luna17 Посмотреть сообщение
мне нужна прога на С++.
Мой второй вариант - как раз на С++.
И для Visual Studio, кстати, работает

Добавлено через 1 минуту
Цитата Сообщение от Luna17 Посмотреть сообщение
Уменя ввод элементов, проходит нормально, а выводит комп какие то непонятные символы
Вводи только символы латинского алфавита, не кириллицу:

Цитата Сообщение от Nameless One Посмотреть сообщение
Кстати, setlocale() позволит тебе, конечно, вывести строки в кириллице, но если ты попробуешь ввести русские буквы в строку, то при выводе этой строки будет не русский текст, а "кракозябры" (это справедливо, конечно, если ты в винде работаешь)
0
 Аватар для Luna17
3 / 2 / 1
Регистрация: 09.03.2010
Сообщений: 95
09.03.2010, 09:33  [ТС]
у меня в сортировке когда выводится список что то непонятное выводит, а при
Введите фамилию mas -858993460 можно ли избежать того что бы печаталось mas -858993460

Добавлено через 57 секунд
Цитата Сообщение от Nameless One Посмотреть сообщение
Мой второй вариант - как раз на С++.
И для Visual Studio, кстати, работает

Добавлено через 1 минуту

Вводи только символы латинского алфавита, не кириллицу:
А можно что нить сделать что бы русские буквы были?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
09.03.2010, 09:43
Можно
В начале программы впиши
C++
1
#include <windows.h>
В начале функции main впиши строки
C++
1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Открой свойства консоли и во вкладке "Шрифт" выбери Lucida Console (вообще про руссификацию консоли написано тут)

Добавлено через 1 минуту
Цитата Сообщение от Luna17 Посмотреть сообщение
у меня в сортировке когда выводится список что то непонятное выводит
Это потому, что у тебя неправильный алгоритм и, следовательно, неправильная программа

Добавлено через 1 минуту
Цитата Сообщение от Luna17 Посмотреть сообщение
Введите фамилию mas -858993460 можно ли избежать того что бы печаталось mas -858993460
А как так получилось, что у тебя значение переменной i приняло значение -858993460?
0
 Аватар для Luna17
3 / 2 / 1
Регистрация: 09.03.2010
Сообщений: 95
09.03.2010, 18:44  [ТС]
не знаю,
но спс за помощь основ прог правильна составлена и этого хватило на защиту
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.03.2010, 18:44
Помогаю со студенческими работами здесь

Вывод в консоль двумерного символьного массива
Есть некий массив. char slovar = { {&quot;Slovo &quot; , &quot;Opredelenie\n&quot;} {&quot;slovo2 &quot;, &quot;Opredelenie2\n&quot;} } Надо что бы он...

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

Сортировка символьного массива по алфавиту
Доброго времени суток. Есть вопрос по одной задачке. Условие. Дан массив с фамилиями. Цель - отсортировать его по алфавиту. Я...

Пузырьковая сортировка двумерного символьного массива
Передо мной была поставлена задача написать код, осуществляющий сортировку рандомно-сгенерированого символьного массива. Сгенерировал...

Сортировка вставками двумерного символьного массива
Есть двумерный символьный массив, , содержащий в себе строки с личными данными (условно, ФИО). Нужно эти строки отсортировать по алфавиту...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru