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

Отсортировать слова по алфавиту в массиве char. Между словами по несколько пробелов - C++

Восстановить пароль Регистрация
 
big_boom
1 / 1 / 0
Регистрация: 28.01.2014
Сообщений: 14
27.03.2014, 03:55     Отсортировать слова по алфавиту в массиве char. Между словами по несколько пробелов #1
Задачка такая: есть строка - вводится юзером. Нужно в этой строке упорядочить слова по алфавиту. Проблема в том, что не знаю з чего начать. Понимаю, что вроде надо сделать массив слов, но не знаю как. Дальше как отсортировать слова - это понятно.
Мой алгоритм такой:
1. Создать массив слов ?
2. Заполнить массив ?
3. Сравнить и отсортировать слова (это сделаю)

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>
using namespace std;
#include <cstring>
void Without_vowels(char *&);
void With_numbers(char *&);
void Sorted_numbers(char *&);
void Sorted_words(char *&);
int main()
{
    char *str = new char[];
    cout << "Enter the string: " << endl;
    rewind(stdin);
    gets(str);
        cout << "Sorted words: " << endl;
    Sorted_words (str);
    cout << endl;
 
    
 
    return 0;
}
 
void Sorted_words(char *&str)
{
    char *ptrnachar;
    char *new_str = new char[strlen(str) + 1];
    strcpy(new_str, str);
    
    int number_words = 0;
    char *next_token2;
    ptrnachar = strtok_s(new_str, " .", &next_token2);
    
    while (ptrnachar != NULL)
    {
        number_words++; // s4itaem kol-vo slov
 
        ptrnachar = strtok_s(NULL, " .", &next_token2);
    }
 
    cout << number_words; // здесь ошибка, как избавиться не знаю
    char **amount_words = new char*[number_words]; // создаем массив с number_words количесивом
    for (int i = 0; i < number_words - 1; i++)
 
        
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2014, 03:55     Отсортировать слова по алфавиту в массиве char. Между словами по несколько пробелов
Посмотрите здесь:

C++ пользователь вводит строчку,а программа выводит количество пробелов между словами в строке.
отсортировать слова по алфавиту C++
C++ удаление пробелов между словами и буквами
Разработать функцию, которая сравнивает две строки, игнорируя количество пробелов между словами C++
C++ Разработать функцию, которая сравнивает две строки, игнорируя количество пробелов между словами.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
27.03.2014, 07:43     Отсортировать слова по алфавиту в массиве char. Между словами по несколько пробелов #2
Начнём с того, что
Цитата Сообщение от big_boom Посмотреть сообщение
есть строка - вводится юзером
Организуем данный ввод в std::string

C++
1
2
3
    std::string line;
 
    std::getline(std::cin, line);
А дальше, вы сказали знаете.
recoder
 Аватар для recoder
129 / 129 / 28
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
27.03.2014, 08:13     Отсортировать слова по алфавиту в массиве char. Между словами по несколько пробелов #3
Массив слов
C++
1
2
3
std::string *str = new std::string[n];
....
delete[] str;
big_boom
1 / 1 / 0
Регистрация: 28.01.2014
Сообщений: 14
27.03.2014, 13:24  [ТС]     Отсортировать слова по алфавиту в массиве char. Между словами по несколько пробелов #4
Извините, что не уточнил. Поздно было, наверно забыл. Здесь нужен массив char. Ну это легко заменить. А как сделать массив слов через strtok это уже проблема. Как я это себе представляю: (1)сортирование делаю пузырьком, т.е. нужно два цыкла. Но здесь опять этот strtok, который нужно использовать. Как strtok подсчитать количество слов? (между словами может быть несколько пробелов).

recoder, а откуда вы взяли n в
C++
1
std::string *str = new std::string[n];
?
и потом почему одномерный массив? я думал что нужно двухмерный
recoder
 Аватар для recoder
129 / 129 / 28
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
27.03.2014, 18:51     Отсортировать слова по алфавиту в массиве char. Между словами по несколько пробелов #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int n;
// Размер массива
std::cin >> n;
std::string str = new std::string[n];
 
// Считывать строки
for (int i = 0; i < n; i++)
    std::cin >> str[i];
 
// что делает-те
...
 
delete[] str;
big_boom
1 / 1 / 0
Регистрация: 28.01.2014
Сообщений: 14
27.03.2014, 19:45  [ТС]     Отсортировать слова по алфавиту в массиве char. Между словами по несколько пробелов #6
Спасибо. Сделал уже
но есть одно но. выводит не слова а какие то странные символи
Взгляните если есть время. Буду очень благодарен.
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
void Sorted_words(char *&str)
{
    char *new_str = new char[strlen(str) + 1];
    char **words = new char*[];
    int i=0, j = 0, ch = 0;
    char *next_token;
    char *ptrnastr = strtok_s(new_str, " .", &next_token);
    while (ptrnastr != NULL)
    {
        words[i] = ptrnastr;
        i++; ch++;
        ptrnastr = strtok_s(NULL, " .", &next_token);
    }
    int n = ch;
    char *t;
    for (int m = 0; m < n - 1; m++)
    {
        for (int k = m + 1; k < n; k++)
        {
            if (strcmp(words[m], words[k]) >0)
            {
                t = words[m];
                words[m] = words[k];
                words[k] = t;
            }
        }
    }
 
    for (int m = 0; m < n; m++)
    {
        cout << words[m] << endl;
    }
}
Добавлено через 16 минут
Все исправил работает)))))))))
Yandex
Объявления
27.03.2014, 19:45     Отсортировать слова по алфавиту в массиве char. Между словами по несколько пробелов
Ответ Создать тему
Опции темы

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