Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kovbaska
3 / 3 / 0
Регистрация: 16.09.2010
Сообщений: 52
#1

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

19.10.2011, 14:50. Просмотров 1076. Ответов 5
Метки нет (Все метки)

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

Дана строка, вывести слова наименьшей длины в порядке возрастания - C++
Здравствуйте! Помогите, пожалуйста, с программой: дана строка, вывести слова наименьшей длины в порядке возрастания.

Дана строка, Вывести на экран эти слова в порядке алфавита - C++
Дана строка, состоящая из слов на английском языке, разделенных пробелами. Вывести на экран эти слова в порядке алфавита Вроде делаю...

Дан текст, вывести на экран слова в порядке уменьшения их длины! - C++
Дан одномерный Массив написать программу преобразования массива путём сдвига их значений! Добавлено через 1 минуту С++ Робота со...

Дана строка, содержащая разделенные пробелами слова, вывести все слова-палиндромы - C++
Дана строка, содержащая разделенные пробелами слова.Вивесты все имеющиеся слова-палиндлромы и их общее количество,срочно надо,у меня не...

Дана строка текста, в которой слова разделены пробелами и запятыми, вывести повторяющиеся слова - C++
Помогите пожалуйста! Как мне найти и вывести повторяющиеся слова? П.С. При работе со строками не использовать указатели. Строки...

Дана строка символов до точки. Записать слова этой строки в обратном порядке - C++
Дана строка символов до точки. Записать слова этой строки в обратном порядке (мама мыла раму > раму мыла мама). Подскажите кто что...

5
asics
Freelance
Эксперт С++
2850 / 1785 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
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/4d4127b82eacd02d951c5dcd4750b8ac
0
Kovbaska
3 / 3 / 0
Регистрация: 16.09.2010
Сообщений: 52
19.10.2011, 15:20  [ТС] #3
Прошу прощения, нужно на С.
0
-=ЮрА=-
Заблокирован
Автор 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;
}
1
Миниатюры
Дана строка. Вывести слова в порядке их уменьшения  
-=ЮрА=-
Заблокирован
Автор 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?

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

Не по теме:

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



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

Не по теме:

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

0
19.10.2011, 17:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2011, 17:47
Привет! Вот еще темы с ответами:

Дана строка символов, состоящая из произвольного текста, слова раз-делены пробелами. Вывести на экран порядковый номер слова, накрывающего k позицию - C++
Помогите с вот такой вот задачкой: Дана строка символов, состоящая из произвольного текста, слова раз- делены пробелами. Вывести на...

Дана строка Найти и вывести все слова палиндромы - C++
Дана строка слова в который разделены пробелами необходимо найти и вывести все слова палиндромы. Вот кое какой код я накидал но он...

Дана строка, вывести различные слова и число их вхождений - C++
Помогите,пожалуйста. Нашел код рабочей программы,но тут очень много непонятного для меня,нужно написать использую string,iostream,cctype ...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.