Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/29: Рейтинг темы: голосов - 29, средняя оценка - 4.86
1 / 1 / 3
Регистрация: 09.11.2009
Сообщений: 51
1

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

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

Author24 — интернет-сервис помощи студентам
Дана строка текста, в которой слова разделены пробелами. Необходимо:
- определить количество слов в строке;
- вывести все слова строки в порядке убывания их длин;
- Вывести на экран все слова с четными номерами.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.11.2009, 01:03
Ответы с готовыми решениями:

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

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

Вывести на экран слова в порядке невозрастания (убывания) их длин
Из произвольного текста, содержащего не более 10 строк, в каждой строке не более 80 символов,...

Напечатать все слова предложения в порядке убывания их длин, используя StringBuilder
Помогите пожалуйста, надеюсь есть люди которым этот вопрос покажется очень лёгким. Надо написать...

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

Цитата Сообщение от toni90 Посмотреть сообщение
- Вывести на экран все слова с четными номерами.
Хотя здесь непонятно: с четными номерами как они стоят в предложении или с четными номерами их длин... ??
1
1 / 1 / 3
Регистрация: 09.11.2009
Сообщений: 51
11.11.2009, 01:20  [ТС] 3
Цитата Сообщение от patriot2008 Посмотреть сообщение
Хотя здесь непонятно: с четными номерами как они стоят в предложении или с четными номерами их длин... ??
Здесь имелось ввиду с четными номерами как они стоят в предложении...
0
73 / 73 / 10
Регистрация: 04.12.2008
Сообщений: 458
11.11.2009, 01:24 4
Цитата Сообщение от toni90 Посмотреть сообщение
Здесь имелось ввиду с четными номерами как они стоят в предложении
Ну это еще проще...
Тогда пункт 3 такой: проход по той же строке, и если счетчик%2==0, то выводим это слово...
1
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
73 / 73 / 10
Регистрация: 04.12.2008
Сообщений: 458
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
1 / 1 / 3
Регистрация: 09.11.2009
Сообщений: 51
11.11.2009, 02:18  [ТС] 7
неа... не пашет.... помоги пожалуйста.... очень надо..
0
73 / 73 / 10
Регистрация: 04.12.2008
Сообщений: 458
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
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
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
425 / 229 / 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
73 / 73 / 10
Регистрация: 04.12.2008
Сообщений: 458
11.11.2009, 19:06 12
Эх, STL... Все намного проще...
0
425 / 229 / 87
Регистрация: 25.03.2009
Сообщений: 744
11.11.2009, 19:09 13
patriot2008, можно и на СИ чистом конечно но зачем?)
0
73 / 73 / 10
Регистрация: 04.12.2008
Сообщений: 458
11.11.2009, 19:36 14
Это зависит от того кто будет принимать задачу. Подойдет STL или нет.
0
425 / 229 / 87
Регистрация: 25.03.2009
Сообщений: 744
11.11.2009, 19:37 15
patriot2008, ну это ясно я пишу просто чтобы он видел один из вариантов а там отфильтрует какой ему подойдёт из предложенных )
0
1 / 1 / 3
Регистрация: 09.11.2009
Сообщений: 51
11.11.2009, 23:21  [ТС] 16
Всем спасибо!!!
0
11.11.2009, 23:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.11.2009, 23:21
Помогаю со студенческими работами здесь

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

Строки. Напечатать все слова предложения в порядке неубывания их длин
дано предложение.слова разделены пробелами.в конце точка.напечатать все его слова в порядке...

Дана строка: напечатать все слова из строки в порядке неубывания их длин
Дана строка. Напечатать все слова из строки в порядке неубывания их длин. Пример работы...

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru