Форум программистов, компьютерный форум CyberForum.ru

сортировка предложения по алфавиту - C++

Восстановить пароль Регистрация
 
KrisDen
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 10
20.03.2013, 19:54     сортировка предложения по алфавиту #1
Всем привет))помогите мне пожалуйста разобраться...задание было таковым - дана прога которая сортирует слова из введенного текста по алфавиту. нужно сделать:
1)если вводятся одинаковые слова то распечатать их только один раз
2)разобраться что за сортировка
и вопрос лично от меня, в каком именно месте происходит эта сортировка?? Всем огромное спасибо кто откликнулся и попытался помочь!
вот код -
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
32
33
34
35
#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 ", strnew[i]);
        _getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2013, 19:54     сортировка предложения по алфавиту
Посмотрите здесь:

Сортировка по алфавиту C++
C++ Сортировка по алфавиту
сортировка по алфавиту C++
Сортировка по алфавиту C++
C++ Сортировка по алфавиту
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SummerRain
 Аватар для SummerRain
325 / 324 / 17
Регистрация: 16.12.2012
Сообщений: 544
20.03.2013, 20:09     сортировка предложения по алфавиту #2
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
 
std::vector<std::string> split(const std::string& s) {
    std::vector<std::string> vec;
    typedef std::string::size_type str_size;
    str_size i = 0;
    int count = 0;
    while (i != s.size()) {
        while (isspace(s[i]) && i != s.size())
            ++i;
        str_size j = i;
        while (!isspace(s[j]) && j != s.size())
            ++j;
        if (i != j) {
            vec.push_back(s.substr(i, j - i));
            i = j;
        }
    }
    return vec;
}
 
bool compare(const std::string& str1, const std::string& str2) {
    return str1 < str2;
}
 
void showVec(const std::vector<std::string>& vec) {
    for (std::vector<std::string>::const_iterator it = vec.begin(); it != vec.end(); ++it)
        std::cout << *it << " ";
}
 
int main()
{
    std::string str;
    std::cout << "Enter any string" << std::endl;
    std::getline(std::cin, str);
    std::vector<std::string> vs = split(str);
    std::sort(vs.begin(), vs.end(), compare);
    showVec(vs);    
    
    system("PAUSE>0");
    return 0;
}
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.03.2013, 20:11     сортировка предложения по алфавиту #3
Для заданий на подобии вашего как раз была придумана структура данных называемая "дерево". "Дерево" реализовано в виде шаблона stl <map>. Посмотрите, как всё просто:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <map>
 
int main()
{
    std::string word;
    std::map<std::string, char> cl;
 
    while (std::cin >> word)
    {
        cl[word] = '1';
        if (std::cin.get() == '\n')
            break;
    }
    
    for (std::map<std::string, char>::const_iterator i = cl.begin(); i != cl.end(); ++i)
        std::cout << i->first << ' ';
 
    return 0;
}
KrisDen
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 10
20.03.2013, 20:38  [ТС]     сортировка предложения по алфавиту #4
а причем тут дерево??
SummerRain
 Аватар для SummerRain
325 / 324 / 17
Регистрация: 16.12.2012
Сообщений: 544
20.03.2013, 21:04     сортировка предложения по алфавиту #5
Цитата Сообщение от KrisDen Посмотреть сообщение
а причем тут дерево??
мой вариант не устраивает?
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.03.2013, 21:08     сортировка предложения по алфавиту #6
Цитата Сообщение от KrisDen Посмотреть сообщение
а причем тут дерево??
Контейнер map древовидная структура данных организована в виде ассоциативного массива.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
20.03.2013, 21:14     сортировка предложения по алфавиту #7
Цитата Сообщение от xtorne21st Посмотреть сообщение
"Дерево" реализовано в виде шаблона stl <map>
щито

Добавлено через 1 минуту
Кстати и map тут ни к селу ни к городу, я бы set понял еще
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.03.2013, 21:18     сортировка предложения по алфавиту #8
MrGluck, У меня за последние несколько дней сложилось впечатление что ты просто ненавидишь <map>
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
20.03.2013, 21:20     сортировка предложения по алфавиту #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <algorithm>
#include <iterator>
#include <sstream>
#include <string>
#include <set>
 
typedef std::istream_iterator<std::string> input_string;
typedef std::ostream_iterator<std::string> output_string;
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    std::istringstream ist(str);
    std::set<std::string> s((input_string(ist)), input_string());
    std::copy(s.begin(), s.end(), output_string(std::cout, " ") );
}
Добавлено через 1 минуту
Цитата Сообщение от xtorne21st Посмотреть сообщение
MrGluck, У меня за последние несколько дней сложилось впечатление что ты просто ненавидишь <map>
У меня сложилось впечатление, что вы его лепите куда ни попадя. Инструментарий надо выбирать грамотно, а не то, что я мол слышал и давай теперь повсюду вставлять.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.03.2013, 21:29     сортировка предложения по алфавиту #10
Цитата Сообщение от MrGluck Посмотреть сообщение
У меня сложилось впечатление, что вы его лепите куда ни попадя. Инструментарий надо выбирать грамотно, а не то, что я мол слышал и давай теперь повсюду вставлять.

Не по теме:

Теперь ясно, что вы имели ввиду. За наставление спасибо. К сожалению, мой арсенал ограничен. Вот и приходится лепить из того что есть.


C++
1
std::istringstream ist(str);
поясните, пожалуйста, значение вот этого вот.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
20.03.2013, 21:34     сортировка предложения по алфавиту #11
Цитата Сообщение от xtorne21st Посмотреть сообщение
C++
1
std::istringstream ist(str);
поясните, пожалуйста, значение вот этого вот.
Объект для манипуляций со строками, с которого мы считываем, как если бы это был std::cin. В конструкторе инициализируем его строкой str, далее, пока он не пуст, достаем из него std::string, которые получаются разделены пробелами.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.03.2013, 22:30     сортировка предложения по алфавиту #12
MrGluck, По поводу организации std::set, он точно также организован как и std:map за исключением того, что в нём отсутствует value? Или есть ещё какие-то отличи? И по поводу std::stringstream это структура данных организована в виде очереди для храниня потока ввода вывода?

Добавлено через 5 минут
Поправьте и/или дополните если что-то не так.

Добавлено через 7 минут
И ещё не ясно как так вы инициализируете std::set:
C++
1
std::set<std::string> s((input_string(ist)), input_string());
Первый параметр в скобках ясен, а вот второй input_string() без аргументов не совсем понятен.
KrisDen
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 10
20.03.2013, 22:45  [ТС]     сортировка предложения по алфавиту #13
оу,ничего из этого не подходит...нужно поработать над тем кодом который дан,внести туда корректив...те убрать повторяющиеся слова при распечатке на экран.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
20.03.2013, 23:19     сортировка предложения по алфавиту #14
Цитата Сообщение от xtorne21st Посмотреть сообщение
По поводу организации std::set, он точно также организован как и std:map за исключением того, что в нём отсутствует value?
да

Цитата Сообщение от xtorne21st Посмотреть сообщение
И ещё не ясно как так вы инициализируете std::set:
C++
1
2
3
4
template< class InputIt >
set( InputIt first, InputIt last,
     const Compare& comp = Compare(),
     const Allocator& alloc = Allocator() );
компаратор и аллокатор по умолчанию. Считывание идет пока не будет равно std::istream_iterator<std::string>(), т.е., фактически, istringstream "закончится".
Дабы приобщиться т.к. писать много, объясню точно не лучше, чем в мануале + там примеры.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
21.03.2013, 04:38     сортировка предложения по алфавиту #15
MrGluck,
C++
1
std::set<std::string> s((input_string(ist)), input_string());
Не пойму зачем здесь нужны двойные скобки? Они тут кажутся излишними. Хотя без них успешная компиляция не возможна. Объясните, пожалуйста, в чём соль?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2013, 08:48     сортировка предложения по алфавиту
Еще ссылки по теме:

C++ Сортировка по алфавиту
Сортировка по алфавиту C++
Предложения, состоящие из заданного количества слов, упорядоченных по алфавиту C++

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
21.03.2013, 08:48     сортировка предложения по алфавиту #16
Цитата Сообщение от xtorne21st Посмотреть сообщение
MrGluck,
C++
1
std::set<std::string> s((input_string(ist)), input_string());
Не пойму зачем здесь нужны двойные скобки? Они тут кажутся излишними. Хотя без них успешная компиляция не возможна. Объясните, пожалуйста, в чём соль?
Без них возможно интерпретировать как функцию, возвращающую std::set<std::string> и принимающую два аргумента, т.е. данная вещь воспринимается неверно. С добавлением круглых скобок, данное выражение уже не соответствует синтаксису объявления функции.

Способы инициализации контейнера

Добавлено через 3 минуты
Цитата Сообщение от KrisDen Посмотреть сообщение
оу,ничего из этого не подходит...нужно поработать над тем кодом который дан,внести туда корректив...те убрать повторяющиеся слова при распечатке на экран.
Я даже не знаю, что мб проще, ну strtok тогда вам в помощь и двумерный массив char с сортировкой и проверкой на соседние элементы.
Yandex
Объявления
21.03.2013, 08:48     сортировка предложения по алфавиту
Ответ Создать тему
Опции темы

Текущее время: 00:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru