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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
toni90
1 / 1 / 0
Регистрация: 09.11.2009
Сообщений: 51
#1

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

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

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

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

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

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

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

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

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

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

Цитата Сообщение от toni90 Посмотреть сообщение
- Вывести на экран все слова с четными номерами.
Хотя здесь непонятно: с четными номерами как они стоят в предложении или с четными номерами их длин... ??
1
toni90
1 / 1 / 0
Регистрация: 09.11.2009
Сообщений: 51
11.11.2009, 01:20  [ТС] #3
Цитата Сообщение от patriot2008 Посмотреть сообщение
Хотя здесь непонятно: с четными номерами как они стоят в предложении или с четными номерами их длин... ??
Здесь имелось ввиду с четными номерами как они стоят в предложении...
0
patriot2008
72 / 72 / 4
Регистрация: 04.12.2008
Сообщений: 463
11.11.2009, 01:24 #4
Цитата Сообщение от toni90 Посмотреть сообщение
Здесь имелось ввиду с четными номерами как они стоят в предложении
Ну это еще проще...
Тогда пункт 3 такой: проход по той же строке, и если счетчик%2==0, то выводим это слово...
1
toni90
1 / 1 / 0
Регистрация: 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 / 4
Регистрация: 04.12.2008
Сообщений: 463
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 / 0
Регистрация: 09.11.2009
Сообщений: 51
11.11.2009, 02:18  [ТС] #7
неа... не пашет.... помоги пожалуйста.... очень надо..
0
patriot2008
72 / 72 / 4
Регистрация: 04.12.2008
Сообщений: 463
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
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,339
Завершенные тесты: 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Эксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,811
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
Андрейка
419 / 223 / 27
Регистрация: 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 / 4
Регистрация: 04.12.2008
Сообщений: 463
11.11.2009, 19:06 #12
Эх, STL... Все намного проще...
0
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
11.11.2009, 19:09 #13
patriot2008, можно и на СИ чистом конечно но зачем?)
0
patriot2008
72 / 72 / 4
Регистрация: 04.12.2008
Сообщений: 463
11.11.2009, 19:36 #14
Это зависит от того кто будет принимать задачу. Подойдет STL или нет.
0
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
11.11.2009, 19:37 #15
patriot2008, ну это ясно я пишу просто чтобы он видел один из вариантов а там отфильтрует какой ему подойдёт из предложенных )
0
11.11.2009, 19:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2009, 19:37
Привет! Вот еще темы с ответами:

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

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

Нужно отсортировать массив в порядке убывания длин векторов С++ - C++
Данный массив А - массив векторов. Отсортировать его в порядке убывания длин векторов. Разработать класс, объект которого реализует ...

Вывести в порядке убывания все целые числа заданного интервала - C++
3. Данные два целых числа А и В (А &lt; В). Вывести в порядке убывания все целые числа, расположенные между А и В (не включая числа А и В), а...


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

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

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