Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
toni90
1 / 1 / 3
Регистрация: 09.11.2009
Сообщений: 51
1

Вывести все слова строки в порядке убывания их длин

11.11.2009, 01:03. Просмотров 1981. Ответов 15
Метки нет (Все метки)

Дана строка текста, в которой слова разделены пробелами. Необходимо:
- определить количество слов в строке;
- вывести все слова строки в порядке убывания их длин;
- Вывести на экран все слова с четными номерами.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2009, 01:03
Ответы с готовыми решениями:

Вывести слова в порядке убывания их длин
Дано предложение состоящее только из букв латинского алфавита с нижним и (или)...

Вывести все слова строки в порядке убывания
Помогите пожалуйста: Дана строка текста, в которой слова разделены пробелами....

Вывести слова строки в порядке убывания длины
требуется написать программу которая: -считает количество слов в предложении...

Вывести слова строки в порядке убывания числа букв в них
Собственно, имеется готовая на половину программа: #include "stdio.h"...

Вывести все четные числа массива в порядке возрастания их индексов, а затем все нечетные в порядке убывания
Дан целочисленный массив размера N.Вывести в начале все содержащиеся в данном...

15
patriot2008
72 / 72 / 10
Регистрация: 04.12.2008
Сообщений: 460
11.11.2009, 01:15 2
Алгоритм такой:
1. проход по строке до конца, и если попадается пробел, что счетчик ++. А также идет паралельно массив счетчиков для каждого слова и посчитывает длину.
2. сортировка массива счетчиков по убыванию
3. если длина слова %2 == 0, то вывод этого слова на экран

Цитата Сообщение от toni90 Посмотреть сообщение
- Вывести на экран все слова с четными номерами.
Хотя здесь непонятно: с четными номерами как они стоят в предложении или с четными номерами их длин... ??
1
toni90
1 / 1 / 3
Регистрация: 09.11.2009
Сообщений: 51
11.11.2009, 01:20  [ТС] 3
Цитата Сообщение от patriot2008 Посмотреть сообщение
Хотя здесь непонятно: с четными номерами как они стоят в предложении или с четными номерами их длин... ??
Здесь имелось ввиду с четными номерами как они стоят в предложении...
0
patriot2008
72 / 72 / 10
Регистрация: 04.12.2008
Сообщений: 460
11.11.2009, 01:24 4
Цитата Сообщение от toni90 Посмотреть сообщение
Здесь имелось ввиду с четными номерами как они стоят в предложении
Ну это еще проще...
Тогда пункт 3 такой: проход по той же строке, и если счетчик%2==0, то выводим это слово...
1
toni90
1 / 1 / 3
Регистрация: 09.11.2009
Сообщений: 51
11.11.2009, 01:26  [ТС] 5
Количество слов я посчитал, а вот сортировать не получается... с сортировками у меня всегда было плохо... если не трудно помоги пожалуйста...

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
//---------------------------------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <iostream.h>
#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
//---------------------------------------------------------------------------
 
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
char s[255];
cout<<"Vvedite stroku: ";
gets(s);
unsigned int a,i;
a=0;
for (i=0;i<strlen(s)-1;i++)
  if ((s[i]==' ') && (s[i+1]!=' '))
   a=a+1;
if (s[0]!=' ')
 a=a+1;
cout<<"V vedenoj stroke slov: "<<a;
getch();
}
 
//---------------------------------------------------------------------------
0
patriot2008
72 / 72 / 10
Регистрация: 04.12.2008
Сообщений: 460
11.11.2009, 01:42 6
Вот немного коректности:
C++
1
2
3
4
5
6
7
8
9
10
11
int arrCount[255];
for (i=0;i<255;i++)
      arrCount[i]=0; //обнуление счетчиков букв в словах
for (i=0;i<strlen(s)-1;i++)
{
      if ((s[i]==' ') || (s[i+1]!='\0'))
          a++;  //подсчет слов
      else
          arrCount[a]++; //подсчет букв в слове
          
}
Ну а дальше самая простая сортировка массива arrCount...
Прогу эту не тестил, но думаю все правильно...
1
toni90
1 / 1 / 3
Регистрация: 09.11.2009
Сообщений: 51
11.11.2009, 02:18  [ТС] 7
неа... не пашет.... помоги пожалуйста.... очень надо..
0
patriot2008
72 / 72 / 10
Регистрация: 04.12.2008
Сообщений: 460
11.11.2009, 17:01 8
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Вот тебе рабочая прога, думаю, что есть решение попроще моего... Но все же
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
#include <iostream>
using namespace std;
void SortHoar(char **a, int n);
void main()
{
 
    char s[255];
    char s2[255][255];
    cout<<"Enter string: ";
    gets(s);
    unsigned int a,i;
    a=0;
    int arrCount[255];
    int ind=0;
    for (i=0;i<255;i++)
                  arrCount[i]=0; //обнуление счетчиков букв в словах
    for (i=0;i<strlen(s);i++)
    {
                     if (s[i]==' ')
            {
                   s2[a][ind] = ' ';
           ind=0;
                            a++;  //подсчет слов
            }
                     else
            {
                              arrCount[a]++; //подсчет букв в слове
                              s2[a][ind++]=s[i];
             }
    }
    cout << "All words  " <<a+1 << endl << endl;
    for (i=0;i<=a;i++)
    {
        for(int j=0;j<arrCount[i]; j++)
        {
            cout << s2[i][j];
        }
        cout << endl;
}
 
 
}
Остается только отвортировать массив слов s2. Условие сортировки: сравнивание strlen(s2[i]). Думаю, что сортировок на этом форуме предостаточно....
1
AnonymC
1179 / 464 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
11.11.2009, 17:43 9
C++
1
2
3
4
5
6
int i, c;
c=i=0;
while((c=getchar())!=EOF){
if(c='\n')
if(c=' ')++i;
}
вот это подсчет слов
1
easybudda
Модератор
Эксперт CЭксперт С++
10107 / 6016 / 1507
Регистрация: 25.07.2009
Сообщений: 11,404
11.11.2009, 17:55 10
Цитата Сообщение от МедведЪ Посмотреть сообщение
C++
1
2
3
4
5
6
int i, c;
c=i=0;
while((c=getchar())!=EOF){
if(c='\n')
if(c=' ')++i;
}
вот это подсчет слов
косяк это, а не подсчёт слов!
if(c='\n')
if(c=' ')++i;
во-первых if ( c== '\n') - сравнение, а не присваивание
во-вторых при таком подходе i будет всегда увеличиваться потому, что выражение if ( с = ' ' ) всегда будет истинным, а с будет равно ' '. Если же = заменить на ==, всё равно ерунда получится:
if ( c == '\n' )
if ( c == ' ' ) /* всегда ложно, с содержит '\n' */
переменной i увеличиться не судьба...
1
Андрейка
422 / 226 / 87
Регистрация: 25.03.2009
Сообщений: 744
11.11.2009, 18:22 11
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
bool compare(const string &a, const string &b)
{
    return a.length() > b.length() ;
}
int main()
{
    setlocale(LC_ALL, "RUSSIAN") ;
    string temp ; 
    vector < string > a ; 
    cout << "введите слово" << endl ;
    cin >> temp ;
    while (temp!="0")
    {
        a.push_back(temp) ;
        cout << "введите очередное слово" << endl ;
        cin >> temp ; 
    }
    cout << "всего слов в строке - " << ' ' << a.size() << endl ;
    cout << "слова с чётными индексами" << endl ; 
    for (size_t i = 0 ; i < a.size() ; i+=2)
        cout << a[i] << endl ;
    sort(a.begin(),a.end(),compare) ;
    cout << "слова в порядке убывания длин:" << endl ;
    copy(a.begin(),a.end(),ostream_iterator<string>(cout," ")) ;
    cout << endl ; 
    return 0;
}
1
patriot2008
72 / 72 / 10
Регистрация: 04.12.2008
Сообщений: 460
11.11.2009, 19:06 12
Эх, STL... Все намного проще...
0
Андрейка
422 / 226 / 87
Регистрация: 25.03.2009
Сообщений: 744
11.11.2009, 19:09 13
patriot2008, можно и на СИ чистом конечно но зачем?)
0
patriot2008
72 / 72 / 10
Регистрация: 04.12.2008
Сообщений: 460
11.11.2009, 19:36 14
Это зависит от того кто будет принимать задачу. Подойдет STL или нет.
0
Андрейка
422 / 226 / 87
Регистрация: 25.03.2009
Сообщений: 744
11.11.2009, 19:37 15
patriot2008, ну это ясно я пишу просто чтобы он видел один из вариантов а там отфильтрует какой ему подойдёт из предложенных )
0
toni90
1 / 1 / 3
Регистрация: 09.11.2009
Сообщений: 51
11.11.2009, 23:21  [ТС] 16
Всем спасибо!!!
0
11.11.2009, 23:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2009, 23:21

Вывести слова сообщения в порядке возрастания их длин
Вывести слова сообщения в порядке возрастания их длин.

Дано предложение. Напечатать все слова в порядке возрастания их длин
Нужно сделать без &quot;классов&quot;, а я знаю как делать только с классами. Помогите...

Вывести слова в порядке убывания количества символов
Помогите написать программу на Turbo C: Дано предложение. Вывести слова в...


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

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

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