С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Vyzov
6 / 6 / 1
Регистрация: 19.02.2013
Сообщений: 64
#1

Использование функциональных классов - C++

19.02.2013, 00:48. Просмотров 1835. Ответов 13
Метки нет (Все метки)

Помогите решить задачу:

Создать список из строк длиной не более 100 символов.
Из всех подряд идущих строк с одинаковым количеством цифр оставить только одну. Физически уменьшить размер списка.

Примечание: Во всех вариантах этого задания требуется написать собственный функциональный класс и использовать его в подходящих для выполнения задания алгоритмах STL. Соответствующие контейнеры должны содержать не менее 30 элементов, данные в них следует читать из текстового файла.

Моя потытка выглядела так:
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
#include <string>
#include <list>
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
 
class Fun
{public:
    int number (string);
    bool operator () (string,string);
};
bool Fun::operator()(string a, string b)
{
    return(number(a)==number(b));
}
int number (string a)
{
    a.c_str();
    for (char i='0';i!='9';i++)
    {
    if (a.find(a)!=string::npos)
        int i = 0;
        i++;
        return i;
    }
}
 
 
 
int main()
{
    setlocale(LC_ALL,"");
 
    list <string> L(100);
    list <string> :: iterator it;
 
    ifstream f ("string.txt");
    string i;
    for(it = L.begin(); it!=L.end();it++);
    {
    while(!f.eof())
    {
        f>>i;
        L.push_back(i);
    }
    }
    cout<<"Введенные данные:"<<endl;
    for(it = L.begin(); it!=L.end(); it++)
    cout<<*it<<" ";
    cout<<endl;
 
    Fun F;
    //for(it = L.begin(); it!=L.end();it++);
    remove_if(L.begin(),L.end(),F); //здесь пытаюсь удалить лишние строки, успользуя предикат, но не знаю будет ли работать ошибку выдало еще раньше в файле algorithm
 
    
    cout<<"Обработанные данные:"<<endl;
    for(it = L.begin(); it!=L.end(); it++)
    cout<<*it<<" ";
    cout<<endl;
}
P.S. Програмка нужна срочно т.к. здавать уже завтра...

Добавлено через 12 минут
В файле string было вот это:
a a a a a a a a a 1
b b b b b b b b b 1
c c c c c c c c 2 2
d d d d d d d d 2 2
e e e e e e e e 2 2
f f f f f f f 3 3 3
g g g g g g g 3 3 3
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2013, 00:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование функциональных классов (C++):

Шаблоны функциональных классов, модульное программирование - C++
Пишу лабораторную по C++. Суть состоит в том, что нужно описать шаблоны функциональных классов, методы которых должны быть описаны вне...

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов - C++
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...

Использование классов - C++
Составить программу для объявления и использования данных типа класс согласно индивидуальному заданию, Базовый (транспортное средство) ...

Использование классов - C++
Разработать заголовочный файл, содержащий описание соответствующего класса, функции и операторы. Описание функций-членов класса разместить...

Использование классов - C++
Расскажите пожалуйста на кокретных примерах как и где модно использовать классы?

Использование классов - C++
Класс Члены класса Методы Операторы перегрузки Исходные данные Матрица Размерность ...

13
Kuzia domovenok
2078 / 1907 / 176
Регистрация: 25.03.2012
Сообщений: 6,572
Записей в блоге: 1
19.02.2013, 00:58 #2
я не понимаю, что ты вообще пытаешься сделать с этими итераторами.
Вот здесь, что по-твоему происходит?
C++
1
2
3
4
5
6
7
8
for(it = L.begin(); it!=L.end();it++);
    {
    while(!f.eof())
    {
        f>>i;
        L.push_back(i);
    }
    }
Зачем цикл for?
Зачем вообще учить кресты, если есть Си?
0
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,158
Записей в блоге: 17
19.02.2013, 01:08 #3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Зачем вообще учить кресты, если есть Си?
Зачем писать в раздел ++ если есть Си- раздел ?

Добавлено через 3 минуты
Цитата Сообщение от Vyzov Посмотреть сообщение
Создать список из строк длиной не более 100 символов.
Из всех подряд идущих строк с одинаковым количеством цифр оставить только одну. Физически уменьшить размер списка.
Чет не понял список строк, о каком количестве до одинаковых цифр речь ?
0
Vyzov
6 / 6 / 1
Регистрация: 19.02.2013
Сообщений: 64
19.02.2013, 01:21  [ТС] #4
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
я не понимаю, что ты вообще пытаешься сделать с этими итераторами.
Вот здесь, что по-твоему происходит?
C++
1
2
3
4
5
6
7
8
for(it = L.begin(); it!=L.end();it++);
    {
    while(!f.eof())
    {
        f>>i;
        L.push_back(i);
    }
    }
Здесь идет чтение из файла и запись данных из вайча в список.

Добавлено через 3 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Чет не понял список строк, о каком количестве до одинаковых цифр речь ?
Тоесть если даны строки
a a a 2 2
b b b 3 3
c c 4 4 4
d d 5 5 5

то после обработки дожно остаться:

a a a 2 2
c c 4 4 4
0
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,158
Записей в блоге: 17
19.02.2013, 01:29 #5
Между буквами пробелы ?
0
Vyzov
6 / 6 / 1
Регистрация: 19.02.2013
Сообщений: 64
19.02.2013, 01:35  [ТС] #6
По идее в строке может быть что угодно, хоть сплошной текст, хоть цифры через 3 пробела. Ограничение только в том что строка не должна быть длиннее 100 символов.
0
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,158
Записей в блоге: 17
19.02.2013, 01:37 #7
Ну так это
Цитата Сообщение от Vyzov Посмотреть сообщение
f>>i
пропускает пробелы
0
Vyzov
6 / 6 / 1
Регистрация: 19.02.2013
Сообщений: 64
19.02.2013, 01:42  [ТС] #8
Оу.. просто за основу брал другой проект (который был на практике) там так было...
Добавлено через 2 минуты
Но и задача там была другая
0
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,158
Записей в блоге: 17
19.02.2013, 01:42 #9
Вот чтение из файла ( с учетом пробелов)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
list<string> ls;
 
ifstream ifs("..\\..\\strings.txt");
if(!ifs) { cerr<<"error"; return 1; }
 
// Чтение из файла
string line;
while(getline(ifs,line) )
    {
        ls.push_back(line);
    }
 
// Вывод
copy(ls.begin(),ls.end(),ostream_iterator<string>(cout,"\n") );
 
getchar();
return 0;
}
//---------------------------------------------------------------------------
0
Vyzov
6 / 6 / 1
Регистрация: 19.02.2013
Сообщений: 64
19.02.2013, 02:02  [ТС] #10
Ошибка 1 error C2065: ostream_iterator: необъявленный идентификатор
Ошибка 2 error C2275: std::string: недопустимое использование этого типа в качестве выражения
3 IntelliSense: идентификатор "ostream_iterator" не определен
4 IntelliSense: использование имени типа не допускается
Эти ошибки в строке
C++
1
copy(ls.begin(),ls.end(),ostream_iterator<string>(cout,"\n") );
Может нужно подключить чего?
0
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,158
Записей в блоге: 17
19.02.2013, 02:11 #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
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
#include <fstream>
#include <iostream>
#include <iomanip>
 
#include <string>
#include <list>
 
#include <algorithm>
#include <iterator>
//---------------------------------------------------------------------------
using namespace std;
 
class is_dig
{
    public:
    bool operator()(char ch)
     {
         return isdigit(ch);
     }
};
//---------------------------------------------------------------------------
class rm
{
     int last_count;
    public:
     rm():last_count(-1){};
     bool operator()(string s)
        {
            int count = count_if(s.begin(),s.end(),is_dig() );
            bool result= (count == last_count);
            last_count= count;
 
            return result;
        }
};
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
list<string> ls;
 
ifstream ifs("..\\..\\strings.txt");
if(!ifs) { cerr<<"error"; getchar(); return 1; }
 
// Чтение из файла
string line;
while(getline(ifs,line) )
    {
        ls.push_back(line);
    }
// Вывод
copy(ls.begin(),ls.end(),ostream_iterator<string>(cout,"\n") );
cout<<endl;
 
ls.erase( remove_if(ls.begin(),ls.end(),rm()), ls.end() );
 
// Вывод
copy(ls.begin(),ls.end(),ostream_iterator<string>(cout,"\n") );
 
getchar();
return 0;
}
//---------------------------------------------------------------------------
Как по другому сделать, чет не пришло в голову...

Вывод :
a a a a a a a a a 1
b b b b b b b b b 1
c c c c c c c c 2 2
d d d d d d d d 2 2
e e e e e e e e 2 2
f f f f f f f 3 3 3
g g g g g g g 3 3 3

a a a a a a a a a 1
c c c c c c c c 2 2
f f f f f f f 3 3 3
1
Vyzov
6 / 6 / 1
Регистрация: 19.02.2013
Сообщений: 64
19.02.2013, 02:13  [ТС] #12
Спасибо большое, особенно за оперативность.
0
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,158
Записей в блоге: 17
19.02.2013, 02:18 #13
Можно конечно сначала делать sort() потом unique() но тогда порядок следования строк в списке может изменится.
1
ITcrusader
Эксперт С++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
19.02.2013, 13:28 #14
Vyzov, да.

В самый верх добавь:

C++
1
2
3
4
5
6
7
#include <iostream>
#include <fstream>
#include <list>
#include <algorithm>
#include <string>
#include <iterator>
using namespace std;
Что-то невнимательно проглядел сообщения предыдущие.
0
19.02.2013, 13:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2013, 13:28
Привет! Вот еще темы с ответами:

Использование классов - C++
Здравствуйте господа программисты. Помогите мне пожалуста. В Курсовой есть такое задание: &quot;Создать телефонную книгу&quot; Программный проект...

Использование классов - C++
Не хочет запускаться, помогите найти ошибку #include &lt;iostream&gt; #define N 5 using namespace std; class electronic_store { ...

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

Использование наследования классов - C++
День добрый, форум! Вот такой вопрос: Есть родительский класс A, у него 2 потомка, B и C. Внутри другого класса F я создаю объект...


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

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

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