Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
6 / 6 / 2
Регистрация: 19.02.2013
Сообщений: 68
1

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

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

Author24 — интернет-сервис помощи студентам
Помогите решить задачу:

Создать список из строк длиной не более 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.02.2013, 00:48
Ответы с готовыми решениями:

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

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

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

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

13
 Аватар для Kuzia domovenok
4264 / 3323 / 925
Регистрация: 25.03.2012
Сообщений: 12,521
Записей в блоге: 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
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.02.2013, 01:08 3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Зачем вообще учить кресты, если есть Си?
Зачем писать в раздел ++ если есть Си- раздел ?

Добавлено через 3 минуты
Цитата Сообщение от Vyzov Посмотреть сообщение
Создать список из строк длиной не более 100 символов.
Из всех подряд идущих строк с одинаковым количеством цифр оставить только одну. Физически уменьшить размер списка.
Чет не понял список строк, о каком количестве до одинаковых цифр речь ?
0
6 / 6 / 2
Регистрация: 19.02.2013
Сообщений: 68
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
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.02.2013, 01:29 5
Между буквами пробелы ?
0
6 / 6 / 2
Регистрация: 19.02.2013
Сообщений: 68
19.02.2013, 01:35  [ТС] 6
По идее в строке может быть что угодно, хоть сплошной текст, хоть цифры через 3 пробела. Ограничение только в том что строка не должна быть длиннее 100 символов.
0
Эксперт С++
 Аватар для Avazart
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.02.2013, 01:37 7
Ну так это
Цитата Сообщение от Vyzov Посмотреть сообщение
f>>i
пропускает пробелы
0
6 / 6 / 2
Регистрация: 19.02.2013
Сообщений: 68
19.02.2013, 01:42  [ТС] 8
Оу.. просто за основу брал другой проект (который был на практике) там так было...
Добавлено через 2 минуты
Но и задача там была другая
0
Эксперт С++
 Аватар для Avazart
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
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
6 / 6 / 2
Регистрация: 19.02.2013
Сообщений: 68
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
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
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
6 / 6 / 2
Регистрация: 19.02.2013
Сообщений: 68
19.02.2013, 02:13  [ТС] 12
Спасибо большое, особенно за оперативность.
0
Эксперт С++
 Аватар для Avazart
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.02.2013, 02:18 13
Можно конечно сначала делать sort() потом unique() но тогда порядок следования строк в списке может изменится.
1
Эксперт С++
 Аватар для ITcrusader
177 / 163 / 21
Регистрация: 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.02.2013, 13:28
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
Информационное моделирование
hw_wired 28.01.2025
Введение в информационное моделирование В современном мире информационное моделирование стало неотъемлемой частью научной, образовательной и профессиональной деятельности. Это мощный инструмент. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru