Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2016, 16:02   #1
CaBuHoB
Пользователь
 
Регистрация: 15.09.2016
Сообщений: 13
По умолчанию распределение слов в алфавитном порядке

Нужна ваша помощь!
Задача у меня такая:

Ввести строку, вывести слова по алфавиту.

Нашел такой код. Он рабочий, правда сложный, можно ли его упростить, чтобы было понятно начинающему программисту?

Код:
#include <stdio.h>
#include <conio.h>
#include <string>
#include <limits>
#include <locale>
#include <Windows.h>

void main()
{
        setlocale(LC_ALL, "Russian");
        printf("Введите строку: ");
        char s[CHAR_MAX];
        scanf("%[^\n]s", &s);
        OemToCharA(s,s);
        char strnew[CHAR_MAX][CHAR_MAX];
		int k = 0;
		int dl = strlen(s);
		for (int i = 0; i < dl; i++)
			if (s[i] != ' ')
			{
				int j = 0;
				for (j; s[i + j] != ' ' && s[i + j] != '\0'; j++)
					strnew[k][j] = s[i + j];
				strnew[k][j] = '\0';
				k++;
				i += j;
			}
                qsort(strnew, k, CHAR_MAX, (int (*)(const void *,const void *)) strcmp);

                for(int i = 0; i < k; i++)
                        printf("%s\n", strnew[i]);        
}
CaBuHoB вне форума Ответить с цитированием
Старый 18.09.2016, 16:06   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,713
По умолчанию

А что вы увидели сложного в данном коде?
p51x вне форума Ответить с цитированием
Старый 18.09.2016, 16:29   #3
CaBuHoB
Пользователь
 
Регистрация: 15.09.2016
Сообщений: 13
По умолчанию

Просто я начинающий и мне немного не понятны команды "OemToCharA", "strnew", "qsort", "strcmp". Можете пожалуйста вкратце объяснить что к чему?
CaBuHoB вне форума Ответить с цитированием
Старый 18.09.2016, 16:44   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,713
По умолчанию

https://msdn.microsoft.com/ru-ru/lib...(v=vs.85).aspx
http://en.cppreference.com/w/cpp/algorithm/qsort
https://msdn.microsoft.com/ru-ru/library/e0z9k731.aspx

А strnew вообще массив. Вы настолько не знакомы с языком?
p51x вне форума Ответить с цитированием
Старый 18.09.2016, 16:46   #5
CaBuHoB
Пользователь
 
Регистрация: 15.09.2016
Сообщений: 13
По умолчанию

Буквально 2 недели изучаю
CaBuHoB вне форума Ответить с цитированием
Старый 18.09.2016, 18:12   #6
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

CaBuHoB: "Просто я начинающий и мне немного не понятны команды "OemToCharA", "strnew", "qsort", "strcmp". Можете пожалуйста вкратце объяснить что к чему?"

Это всё ерунда! Тебе надо не это!
Тебе надо, параллельно с программированием, осваивать ОТЛАТКУ. Если коротко, ОТЛАТКА - это выполнение программы по шагам, при этом, на каждом шаге, можно смотреть текущее значения переменных (чем она и ценна).

0.jpg

Итак приступим.

1) Видишь желтую стрелку? Это стрелка показывает "текущее выполнение программы". Запомни её. Я повторюсь: запомни её, чтобы мог найти во всех остальных моих фотках. Всегда ищи желтую стрелку.

1.jpg

2) Пусть моя строчка будет такой:

2.jpg

3) Предмомент, когда будет выполнена ф-ция OemToCharA (посмотри на основные переменные):

3.jpg

4.jpg

4) А теперь после работы OemToCharA(ищи желтую стрелку) посмотри на переменную "s":

5.jpg

Вывод 1-й: OemToCharA - перевод из символьной в русскую кодировку (1251).

5) Теперь strlen(s);

6.jpg

Посмотрев на фотку, могу сказать что strlen(s) - подсчет количества символов в строке.

6) Теперь эта херня что делает?

66.jpg

Смотри где стрлка-выполнимости и обращай внимание на значение критических переменных:

7.jpg

а теперь:

8.jpg

Вывод 2-й: кусок кода в п.6 разделяет слова и формирует (заполняет) ими массив strnew[][]. Я смотрел другие переменные - они не поменялись.

7) Посмотрим на значение переменных до выполнения ф-ции qsort.

Последний раз редактировалось ura_111; 18.09.2016 в 19:31.
ura_111 вне форума Ответить с цитированием
Старый 18.09.2016, 18:16   #7
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Лимит на загрузку фоток меня сбил...

Продолжим.

7) Посмотрим на значение переменных до выполнения ф-ции qsort (сразу видно, что переменная "k" -это количество слов в строке).

88.jpg

а теперь (сопоставь значения strnew):

0.jpg

Вывод 3-й: qsort - сортировка слов в массиве strnew.

Что там ещё осталось? strcmp?

Осознанно почитай здесь:

1.jpg

Единственно мне не понятно как вводят параметры в функцию strcmp...

Попробуй сделать тоже самое у себя. Я не знаю в чем ты программируешь, но если в "Microsoft Visual Studio" тогда запуск ОТЛАДКИ - нажать F11. Не бойся экспериментировать. А вообще, такая маленькая программа разберается за минут 5-10. И ещё: ОТЛАДКА работает если выбрать Debug (по умолчанию должен стоять); найди это слово на 1-й фотке.

Последний раз редактировалось ura_111; 18.09.2016 в 19:09.
ura_111 вне форума Ответить с цитированием
Старый 18.09.2016, 18:22   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
перевод из символьной в русскую кодировку
Из чего?


Цитата:
Сообщение от ura_111 Посмотреть сообщение
Посмотрев на фотку, могу сказать что strlen(s) - подсчет количества символов в строке.
А не проще было просто написать в гугле или cppreference.com strlen и прочитать что эта функция делает?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.09.2016, 18:43   #9
Ковер
Пользователь
 
Регистрация: 18.09.2016
Сообщений: 30
По умолчанию

Извиняюсь, я программирую в том же компиляторе, с отладкой знаком. Но как сделать такой выпадающий список в центре экрана?
Ковер вне форума Ответить с цитированием
Старый 18.09.2016, 18:50   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Ковер Посмотреть сообщение
Извиняюсь, я программирую в том же компиляторе, с отладкой знаком. Но как сделать такой выпадающий список в центре экрана?
Мышку навести. Но у компилятора нет никаких выпадающих списков и вообще GUI, Visual Studio это IDE.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка слов в алфавитном порядке CppForYou Общие вопросы C/C++ 0 29.05.2013 16:16
Сортировка слов в алфавитном порядке maxwel6064 Общие вопросы C/C++ 0 14.02.2013 18:29
Вывод слов в алфавитном порядке. strem92 Фриланс 9 20.04.2010 22:10
Составить в алфавитном порядке список всех слов, встречающихся в тексте, и количество этих слов. KAPAHDAW Паскаль, Turbo Pascal, PascalABC.NET 2 17.02.2009 01:19