Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
2 / 2 / 1
Регистрация: 06.03.2016
Сообщений: 75

Тяжелая работа с файлами

25.01.2017, 15:47. Показов 682. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть задание: написать программу на С/С++/C++1x и STL, которая читает
текстовый файл, удаляет заданное слово в каждой строке, сортирует
прочитанные строки без учета регистра символов и сохраняет в новый файл.
Программа должна быть покрыта юнит-тестами.
Я написал на С++ код, парился долго(и он к сожалению не работает правильно), но вопрос не в этом.
Как можно решить данное задание с помощью STL?
(Код если кому будет интересно)
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
#include <iostream>
#include <fstream>
#include <cstring>
#include <cmath>
#define S 150
 
using namespace std;
int main(void)
{
    setlocale(LC_ALL, "rus");
    char buffer[S] = {0};                               //массив хранения всего текста из файла
    ifstream fout("C:\\C.C++\\test\\test.txt");
    if(!fout) {
        cout << "Файл открыть не возможно" << endl;
        return 1;
    }
    
    char ch = 0;
    int i = 0;
    for(; !fout.eof(); i++) {
        fout.get(ch);
        *(buffer + i) = ch;
    }
    fout.close();
    /*for(int a = 0; a < i; a++)
        cout << *(buffer + a);*/
    
    char slovo[32] = {0};                               //массив хранения слова для удаления из текста
    char * sl = new char[32];
    cout << "Введите слово для удаления" << endl;
    cin >> sl;
    strcpy_s(slovo, 32, sl);
    //char new_fayl[S] = {0};                               //массив хранения нового текста
    delete [] sl;
    
    int y = 0;
    int time_p = 0;
    int a = 0;
    for(; a <= i;) {
        if((*(buffer + a) == ' ') || (*(buffer + a) == '\n') || (*(buffer + a) == '\r')) {
            ++a;
            continue;
            //*(buffer + a) = tolower(*(buffer + a));
        }
        else 
            while(1) {
                time_p = a;
                if(*(buffer + a) == *(slovo + y)) {
                    ++a;
                    ++y;
                }
                else if((*(buffer + a - 1) == *(slovo + y - 1)) && ((*(buffer + a) == ' ') || (*(buffer + a) == '\n') || (*(buffer + a) == '\r'))) {
                    for(; time_p < y; time_p++)
                        *(buffer + time_p) = ' ';
                    y = 0;
                }                   
                else break;
            }
        ++a;    
    }
    a = 0;
    while(1) {
        if(((*(buffer + a + 1) == ' ') || (*(buffer + a + 1) == '\n') || (*(buffer + a + 1) == '\r')) && 
            ((*(buffer + a + 1) == ' ') || (*(buffer + a + 1) == '\n') || (*(buffer + a + 1) == '\r'))) {
            int q = strlen(slovo) + abs(a - 1);
            for(; a <= q; a++) 
                *(buffer + a) = ' ';
            continue;
        }
        else if(*(buffer + a) == '\0')  break;      
        else {
            ++a;
            continue;
        }
    }
 
    ofstream fin("C:\\C.C++\\test\\End.txt");
    if(!fin) {
        cout << "Файл создать не возможно" << endl;
        return 2;
    }
    a = 0;
    int q = strlen(buffer);
    for(; a < q; a++)
        fin << *(buffer + a);
    fin.close();
    
    system("pause");
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.01.2017, 15:47
Ответы с готовыми решениями:

Работа с файлами , хотелось бы с windows system файлами
всем привет, нужна интересная идея по программированию, работа с файлами , хотелось бы с windows system файлами, у вас есть какая-то идея?...

Лабораторная работа №5. Работа с файлами и алгоритмы сортировки
1. Написать функцию Load для считывания из текстового файла (например, Workers.txt) информации о работниках и заработной плате. В первой...

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

3
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
25.01.2017, 17:02
Цитата Сообщение от Vlad_1 Посмотреть сообщение
сортирует
прочитанные строки без учета регистра символов
Сравнивая строки между собой или сортируя содержимое строк?

Добавлено через 17 минут
Если сравнивая строки
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
#include <algorithm>
#include <iterator>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
 
// пишем свой char_traits для поиска без учета регистра
struct my_traits : std::char_traits<char>
{
    static bool eq(const char lhs, const char rhs)
    {
        return std::tolower(lhs) == std::tolower(rhs);
    }
    static bool lt(const char lhs, const char rhs)
    {
        return std::tolower(lhs) < std::tolower(rhs);
    }
    static int compare(const char *s1, const char *s2, size_t n)
    {
        while(n--)
        {
            if (!s1 || lt(*s1, *s2))
                return -1;
            else if (!s2 || lt(*s2, *s1))
                return 1;
 
            ++s1; ++s2;
        }
        return 0;
    }
    static const char* find(const char *s1, size_t n, const char c)
    {
        while(n-- && !eq(*s1, c))
            ++s1;
        return s1;
    }
};
 
using mystring = std::basic_string<char, my_traits>;
 
inline std::istream& operator>> (std::istream &ist, mystring &s)
{
    std::string tmp;
    ist >> tmp;
    s.assign(tmp.begin(), tmp.end());
    return ist;
}
 
inline std::istream& getline(std::istream &ist, mystring &s)
{
    std::string tmp;
    std::getline(ist,  tmp);
    s.assign(tmp.begin(), tmp.end());
    return ist;
}
 
inline std::ostream& operator<< (std::ostream &os, const mystring &s)
{
    return os << std::string(s.c_str(), s.length());
}
 
int main()
{
    std::ifstream ifs("input.txt");
    std::ofstream o("output.txt");
    const mystring forDel = "eniki";
    std::vector<mystring> v;
    for (mystring line; getline(ifs, line); v.push_back(line))
    {
        std::istringstream ist(std::string(line.c_str(), line.length()));
        line.clear();
        for (mystring word; ist >> word; )
            if (word != forDel)
                line += word + " ";
    }
    std::sort(v.begin(), v.end());
    std::copy(v.begin(), v.end(), std::ostream_iterator<mystring>(o, "\n"));
}
Если вдруг понадобиться сортировка содержимого строк - думаю справитесь.
0
2 / 2 / 1
Регистрация: 06.03.2016
Сообщений: 75
26.01.2017, 00:24  [ТС]
сортируя содержимое строк. Как я понял что бы получился новый текст, но без удалённых слов и пропусков что останутся на месте удалённого слова

Добавлено через 3 минуты
и какую можно книжку почитать, что бы луче разобраться в ,,
стандартной библиотеке шаблонов,,?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.01.2017, 13:23
Цитата Сообщение от Vlad_1 Посмотреть сообщение
и какую можно книжку почитать, что бы луче разобраться в ,,
стандартной библиотеке шаблонов,,?
Если нужны основы - любую по основам языка.
Конкретно STL мне понравилось как рассматривает Nicolai Josuttis в "The C++ Standard Library. A Tutorial and Reference (2nd Edition)".
Для повышения опыта работы в STL рекомендую Скотт Мeйерс, "Эффективное использование STL".

Хотя из STL тут немного всего - вектор, сортировка, копирование, итератор.
Но ЕМНИП, char_traits у Джосаттиса тоже рассмотрены. Впрочем, я учился обращаться с ними по обычному справочнику с описанием методов.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.01.2017, 13:23
Помогаю со студенческими работами здесь

Тяжелая Контрольная
Преподша дала задание по VB, а я его вообще не знаю. Она сказалы мы его поверхостно проходим, а сама тяжелое задание дала(для меня точно...

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

Тяжелая GIF анимация
Всем привет,у меня есть гифка размером в 70 мб и из-за веса билдер Embarcadero RAD Studio XE2 не хочет билдить :D программу.Можно как нить...

тяжелая цепь массой М
Тяжелая цепь имеет массу М и длину L. Часть ее лежит на горизонтальной подставке, а часть (длиной l0) свисает вниз. Найти зависимость...

Ну ооочень тяжёлая программа =)
Задана запись, состоящая из букв. Количество букв кратно числу n.Всего в записи m слов.Длина слова- n.Составить структурированную программу...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru