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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Fobys
0 / 0 / 0
Регистрация: 25.09.2012
Сообщений: 6
02.10.2012, 01:26     Вывести все слова строки в порядке убывания #1
Помогите пожалуйста:
Дана строка текста, в которой слова разделены пробелами.
Необходимо:
определить количество слов в строке,
вывести все слова строки в порядке убывания их длинны,
вывести на экран все слова с чётными номерами..

Я тут начал
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
#include <iostream>
#include <string.h>
#include <stdio.h>
//Дана строка текста, в которой слова разделены пробелами.Необходимо:
// определить количество слов в строке,
// вывести все слова строки в порядке убывания их длинны,
// вывести на экран все слова с чётными номерами.
using namespace std;
 setlocale(LC_ALL,"Russian"); // установка отображения русского шрифта
 
int main()
{const int max=80; // максимальная длинна строки
char str[max];
cout<<"vvedite stroky: ";
cin.getline(str,max);
cout<<"Vvedennaya stroka: "<<str<<endl;
fgets(str, max, stdin);
int l=strlen(str);
int i, a=0;
for(i=0; i<1; i++)
 if(str[i]==' ')
a++;
cout<<"vivod spaes: "<<a;
 
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2012, 01:26     Вывести все слова строки в порядке убывания
Посмотрите здесь:

C++ Вывести слова строки в порядке убывания длины
Вывести в порядке убывания все целые числа, расположенные между A и B C++
Вывести все целые числа, расположенные между данными числами в порядке их убывания (цикл for) C++
Дан целочисленный массив размера N. Вывести все содержащиеся в данном массиве четные числа в порядке убывания их индексов, а также их количество K C++
C++ Вывести слова строки в порядке убывания числа букв в них
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AnreyKazakov
Заблокирован
02.10.2012, 02:25     Вывести все слова строки в порядке убывания #2
Строка в стиле си должна быть?

Добавлено через 36 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cstring>
using namespace std;
int main(){
    const int max=80; // максимальная длинна строки
    char str[max];
    cout<<"vvedite stroky: ";
    cin.getline(str,max);
    cout<<"Redact stroka: ";
    int i=0,sum=1;
    while(str[i]){
        if(str[i]==' ')++sum;
        if(!(sum%2))cout<<str[i];   
        ++i;
        }
    cout<<" : kol-vo slov - "<<sum<<endl;   
    return 0;
    }
выводит слова через одно (зависит от !sum%2, для инверсии можно убрать "!")
считает кол-во слов,
про ограничения ничего не было сказано, поэтому строка не должна начинаться и заканчиваться символами пробел (тогда надо подправлять чтоб обрезала), между словами долж быть один пробел, иначе лишни сосчитает как слово (если будут тоже надо проходить и удалять лишние), ну и не должна быть пустой, если будет пустая выдаст 1 слово. дабы избежать можно проверять на кол-во символов функцией strlen() или еще как , я в строках си не шарю... =(
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.10.2012, 02:49     Вывести все слова строки в порядке убывания #3
Код
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
//Дана строка текста, в которой слова разделены пробелами. Необходимо:
// определить количество слов в строке,
// вывести все слова строки в порядке убывания их длинны,
// вывести на экран все слова с чётными номерами.
 
#include <string>
#include <vector>
#include <algorithm>
#include <windows.h>
#include <iostream>
using namespace std;
 
bool fcomp(string str1, string str2)
{
    return str1.size() > str2.size();
}
 
int main()
{
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
 vector <string> vec;
 
 cout << "Введите строку: ";
 
 while (true)
 {
    string str;
    cin >> str;
    vec.push_back(str);
    if (cin.peek() == '\n') break;
 }
 
 cout << "\nВведённая строка: ";
 for (int i = 0; i < vec.size(); i++)
    cout << vec[i] << ' ';
 
 cout << endl << "\nКоличество слов в строке: " << vec.size() << endl;
 
 cout << "\nСлова строки с чётными номерами: \n";
 for (int i = 1; i < vec.size(); i += 2)
    cout << vec[i] << endl;
 
 cout << "\nСлова строки в порядке убывания их длины:\n";
 sort(vec.begin(), vec.end(), fcomp);
 for (int i = 0; i < vec.size(); i++)
    cout << vec[i] << endl;
 
 cout << endl;
 system("pause");
 return 0;
 }
AnreyKazakov
Заблокирован
02.10.2012, 03:47     Вывести все слова строки в порядке убывания #4
Можно вставить перед return в предыдущем коде. Выводит в порядке убывания слова.... хотел c map решить. Но потом подумал что извращение строку в стиле си в карту пихать =( лучше уж так ->
без указателей, без контейнеров, но опять таки некрасиво =( да и ладно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    str[strlen(str)+1]='\0';//добавить в конец строки пробел
    str[strlen(str)]=' ';
    int j=0,b=0,bmax=0,imax=0;
    for(j=0;j!=sum;++j){//пробегаем от 0 до количества слов
        i=0;imax=0;b=0;
           while(str[i]){ //ище максим элемент в строке и его индекс
           if(bmax<b){bmax=b;imax=i-bmax;}
           if(str[i]==' ')b=-1;
           ++i;++b;
           }
           while(bmax!=0){ //выводим слово и заменяем пробелами в исходной строке
               cout<<str[imax];
               str[imax]=' ';
               ++imax; --bmax;
               }
            cout<<" ";   
        }
    cout<<endl;
Fobys
0 / 0 / 0
Регистрация: 25.09.2012
Сообщений: 6
02.10.2012, 13:43  [ТС]     Вывести все слова строки в порядке убывания #5
Спасибо все кто помог_)
Yandex
Объявления
02.10.2012, 13:43     Вывести все слова строки в порядке убывания
Ответ Создать тему
Опции темы

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