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

Найти лучшее решение - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить, встретился ли в строке str1 какой-нибудь символ из строки str2 http://www.cyberforum.ru/cpp-beginners/thread331498.html
Нужно написать и протестировать функцию STRS(str1, str2), которая определяет, встретился ли в строке str1 какой-нибудь символ из строки str2. на языке СИ. Буду очень благодарен!!!
C++ про множества не понимаю как решить задачу решите если не трудно заранее спасибо. На плоскости задано n множеств по m точек в каждой. Среди точек первого множества найти такую, которая принадлежит наибольшему количеству множеств. http://www.cyberforum.ru/cpp-beginners/thread331470.html
Наибольшее общее кратное C++
Поясните пожалуйста как работает данная программа. #include<iostream> using namespace std; int main ( ) {setlocale(LC_ALL,"Rus"); int a,b,c; bool g=true; cout<<"Ввведите первое число --> "; cin>>a;
наследование классов C++
Народ, всем приветик! Уже 3 день сижу над етой темой, не получается задание, вчера выбрасывал на форум исходник, но в конце концов сделал я неправильно. Если кто сможет-напишите если нетяжело. А теперь само задание (из книги Шиманович): Введите глобальное перечисление enum shape{prizm,parallelepiped,cube,piramid,cone,cylinder}; Разработайте базовый класс Body (геометрическое тело) для...
C++ Тема для получения полезной информации http://www.cyberforum.ru/cpp-beginners/thread331448.html
Здравствуйте! Предлогаю закрепить эту тему. Дабы не плодить темы с вопросами где находится это, как настроить то, что значит интерпритатор и т.д., предлогаю писать сюда. Тот кто знает ответит вам. P/S Знаю гугл не отменяли, но не всегда там есть информация в том виде в котором её поймет каждый новичек.
C++ Посоветуйте книгу по с++ Посоветуйте книгу по с++ для самых-самых нубов чтобы было понятно, если и понятия не имеешь что это за язык. подробнее

Показать сообщение отдельно
Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
10.07.2011, 17:37     Найти лучшее решение
2 dakuenjery - задание из 6 главы по книге Липпмана, сам недавно его выполнял.
На мой взгляд - Вам код нужно разбить на отдельные функции и уже вызывать их в main().
Подход разбивать задачи на отдельные ячейки (в данном случае функции) - очень практичен.
Я решил данную задачу исходя из того, что нам потребуется новый вектор со словами максимальной длины и новый вектор со словами минимальной длины для дальнейшей работы с ними.
Вот мой вариант решения, в котором я для себя писал комментарии и использовал только те знания, которые почерпнул из предыдущих глав ( до главы номер 6 ) и этой главы ( глава номер 6 ):

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
 
//функция разбиения строки на слова
vector < string >* separate_words( string *line ) {
    string::size_type pos, prev; //позиция конца слова и начала
    const string delims( " \t\n.,?!;:\"" ); //разграничители слов
    vector < string > *sv_separated_words = new vector < string > ;
 
    //нахождение начала первого слова
    prev = line->find_first_not_of( delims );
 
    // пока prev не равняется "not found" (т.е. найдено начало слова)
    while ( prev != string::npos ) {
        //нахождение разделителя (ограничителя) - конца слова
        pos = line->find_first_of( delims, prev );
        sv_separated_words->push_back( line->substr( prev, pos == string::npos ? string::npos : pos - prev ) ); //вставка очередного слова
        // нахождение начала следующего слова
        prev = line->find_first_not_of( delims, pos );
    }
 
    return sv_separated_words;
}
 
vector < string >* fill_sv_min( vector < string >* sv) {
    vector < string >::iterator it = sv->begin();
    string::size_type min_len = sv->begin()->length();
    vector < string >* sv_min = new vector < string >;
 
    for (; it != sv->end(); ++it ) {
 
            if ( it->length() == min_len ) { //если нашли слово такой же длины как и минимальное, то
                sv_min->push_back( *it ); // и его добавляем в вектор
            }
 
            if ( it->length() < min_len ) { //если найдено слово меньшей длины
                min_len = it->length(); //новая минимальная длина
                sv_min->erase( sv_min->begin(), sv_min->end() ); //очищаем вектор от всех предыдущих слов
                sv_min->push_back( *it ); //всталяем новое минимальное слово
            }
        }
 
    return sv_min;
}
 
vector < string >* fill_sv_max( vector < string >* sv) {
    vector < string >::iterator it = sv->begin();
    string::size_type max_len = 0;
    vector < string >* sv_max = new vector < string >;
 
    for ( ; it != sv->end(); ++it ) {
 
            if ( it->length() == max_len ) { //если нашли слово такой же длины как и максимальное, то
                sv_max->push_back( *it ); // и его добавляем в вектор
            }
 
            if ( it->length() > max_len ) { //если найдено слово болшей длины
                max_len = it->length(); //новая максимальная длина
                sv_max->erase( sv_max->begin(), sv_max->end() ); //очищаем вектор от всех предыдущих слов
                sv_max->push_back( *it ); //всталяем новое максимальное слово
            }
        }
 
    return sv_max;
 
}
 
//печать вектора
void print_sv (vector <string>* sv ){
 
    string::size_type i = 0;
    for (vector < string >::iterator it = sv->begin(); it != sv->end(); ++it, ++i )
        cout << "( " << i << " ) " <<  *it << endl;
}
 
int main() {
 
    vector < string > *my_sv_max; //указател на вектор для хранения слов максимальной длины
    vector < string > *my_sv_min; //указатель на вектор для хранения слов минимальной длины
    vector < string > *my_sv; // указатель на вектор для хранения всех слов
    string line1 = "We were her pride of 100000 she named us --------------- ";
    string line2 = "Benjamin, Phoenix, the Prodigal ";
    string line3 = "and perspicacious 77 pacific Suzanne 444444444444444 666666666666666 33 55 88 99";
    string sentence = line1 + line2 + line3; //строка, в которой ищутся слова
 
    my_sv = separate_words( &sentence );  //делим строку на слова и сохраняем ее в векторе my_sv
    my_sv_max = fill_sv_max( my_sv );  //выводим все слова максимальной длины из вектора my_sv и сохраняем их в векторе my_sv_max
    my_sv_min = fill_sv_min( my_sv );  //выводим все слова минимальной длины из вектора my_sv и сохраняем их в векторе my_sv_min
 
    //выводим на экран вектора my_sv_max и my_sv_min
    cout << "Максимальная длина слова начальной строки = " << my_sv_max->begin()->length() << endl;
    cout << "Слова максимальной длины из начальной строки строки:" << endl;
    print_sv( my_sv_max );
    cout << "Минимальная длина слова начальной строки = " << my_sv_min->begin()->length() << endl;
    cout << "Слова мнимальной длины из начальной строки строки:" << endl;
    print_sv( my_sv_min );
 
    return 0;
}


Чтобы скомпилировать вариант от insolent добавь

C++
1
#include <iterator>
 
Текущее время: 01:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru