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

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

09.03.2010, 01:02. Показов 5956. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru