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

Дана строка. Вывести слова в порядке их уменьшения - C++

Восстановить пароль Регистрация
 
Kovbaska
3 / 3 / 0
Регистрация: 16.09.2010
Сообщений: 52
19.10.2011, 14:50     Дана строка. Вывести слова в порядке их уменьшения #1
Здравствуйте. Помогите пожалуйста решить такую вот задачку.
Нужно ввести строку, потом вывести на экран слова, в порядке их уменьшения(количество букв).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2011, 14:50     Дана строка. Вывести слова в порядке их уменьшения
Посмотрите здесь:

Дан текст, вывести на экран слова в порядке уменьшения их длины! C++
[C++] Дана строка. расположить в ней слова в алфавитном порядке. C++
Дана строка Найти и вывести все слова палиндромы C++
C++ Дана строка символов, состоящая из произвольного текста, слова раз-делены пробелами. Вывести на экран порядковый номер слова, накрывающего k позицию
Дана строка, вывести слова наименьшей длины в порядке возрастания C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
19.10.2011, 15:17     Дана строка. Вывести слова в порядке их уменьшения #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <string>
#include <iostream>
#include <set>
#include <functional>
#include <sstream>
 
typedef std::string  T_str;
 
int main(){
  T_str  s("sfs erwsf wr   zxczxcz rwerr");
  //getline(std::cin, s);
  std::multiset<T_str, std::function<bool (T_str, T_str)>> 
                ss([](const T_str &s, const T_str &_s){
                  return s.length() > _s.length();
                });
  std::istringstream ist(s);
  for(s.clear(); ist >> s; ss.insert(s)) {}
  for(auto &x : ss) std::cout << x << ' '; 
  return 0;
}
http://liveworkspace.org/code/4d4127...1c5dcd4750b8ac
Kovbaska
3 / 3 / 0
Регистрация: 16.09.2010
Сообщений: 52
19.10.2011, 15:20  [ТС]     Дана строка. Вывести слова в порядке их уменьшения #3
Прошу прощения, нужно на С.
-=ЮрА=-
Заблокирован
Автор FAQ
19.10.2011, 17:23     Дана строка. Вывести слова в порядке их уменьшения #4
Kovbaska, вот на Си
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <string.h>//strlen strtok
#include <stdlib.h>//malloc
#include <stdio.h>//printf scanf
 
int main()
{
    char ch;//Символ служит условием продолжения или окончания 
    //do while
    char str[1025] = {0};//Думаю 1024 символов с лихвой хватит
    char buf[1025] = {0};//Буфер строки ввода
    char *tok;//Указатель на слово в строке
    char delim[] = " !?.,;";//возможные разделители между словами
    long i,j,bfr,nWords = 0;//Число слов в строке
    long * WordLen;//Указатель на массив с длинами слов
    do
    {
        printf("\tEnter input string\n");
        //В str введенная строка (можно с пробелами)
        scanf("%[^\n]%c",str,&ch);//В ch \n от ввода можно этого не делать
        sprintf(buf,"%s",str);
        
        tok = strtok(buf,delim);
        while(tok)
        {
            nWords++;
            tok = strtok(NULL,delim);
        }
        WordLen = (long *)malloc(nWords*sizeof(long));
        sprintf(buf,"%s",str);
        //Записываем в WordLen длины слов строки
        i = 0;
        tok = strtok(buf,delim);
        while(tok)
        {
            WordLen[i] = strlen(tok);
            tok = strtok(NULL,delim);
            i++;
        }
        //Сортируем длины выводимых слов
        for(i = 0; i < nWords; i++)
        for(j = i + 1; j < nWords; j++)
        {
            if(WordLen[j] < WordLen[i])
            {
                bfr = WordLen[i];
                WordLen[i] = WordLen[j];
                WordLen[j] = bfr;
            }
        }
 
        //Выводим слова по возрастанию числа символов в них
        printf("\tWords in string:\n");
        for(i = 0; i < nWords; i++)
        {
            sprintf(buf,"%s",str);
            tok = strtok(buf,delim);
            while(tok && i < nWords)
            {
                if(WordLen[i] == strlen(tok))
                {
                    printf("%s\n",tok);
                    //Пробираем слова одинаковой длинны
                    if(i < nWords - 1)
                    if(WordLen[i] == WordLen[i + 1])
                        i++;
                }
                tok = strtok(NULL,delim);
            }
        }
        free((void *)WordLen);
        printf("Enter 1 for new input\n");
        scanf("%d",&i);
    }
    while(i == 1);
    return 0;
}
Миниатюры
Дана строка. Вывести слова в порядке их уменьшения  
-=ЮрА=-
Заблокирован
Автор FAQ
19.10.2011, 17:32     Дана строка. Вывести слова в порядке их уменьшения #5
Упс я сделал возрастания числа букв, для убывания нужно сменить условие здесь
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
//Сортируем длины выводимых слов
* * * * * * * * for(i = 0; i < nWords; i++)
* * * * * * * * for(j = i + 1; j < nWords; j++)
* * * * * * * * {
* * * * * * * * * * * * if(WordLen[j] < WordLen[i])
* * * * * * * * * * * * {
на следующее
C++
1
2
3
4
5
6
7
//Сортируем длины выводимых слов
        for(i = 0; i < nWords; i++)
        for(j = i + 1; j < nWords; j++)
        {
            if(WordLen[i] < WordLen[j])
            //if(WordLen[j] < WordLen[i])
            {

Не по теме:

Цитата Сообщение от asics Посмотреть сообщение
std::string *T_str;
asics, поясни мне глупому зачем было переопределять тип данных std::string?

Миниатюры
Дана строка. Вывести слова в порядке их уменьшения  
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
19.10.2011, 17:47     Дана строка. Вывести слова в порядке их уменьшения #6

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
, поясни мне глупому
Для красоты кода, а то очень длынные строки получились бы.



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

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
переопределять
Что вообще такое "переопределение" типа данных ? Где такой термин вычитал, в контексте типа данных ?

Yandex
Объявления
19.10.2011, 17:47     Дана строка. Вывести слова в порядке их уменьшения
Ответ Создать тему
Опции темы

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