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

Фильтрация текста в файле - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Закрытые поля структуры. http://www.cyberforum.ru/cpp-beginners/thread45885.html
Существуют ли закрытые поля структуры? Если да, то как их описывать? Добавлено через 39 минут 26 секунд Ну что никто не может ответить на такой легкий вопрос?
C++ Внутреннее представление конструтора и деструктора Я знаю, что конструктор и деструктор в явном виде ничего не возвращает. Однако на уровне ассемблерных команд он восстанавливает содержимое вершины стека(в регистр, ячейку памяти или сегментый... http://www.cyberforum.ru/cpp-beginners/thread45882.html
Генерация очень больших случайных чисел C++
Пожалуйста помогите мне нужна программа генерирующая числа размером 12 символов вот мой код : #include "stdafx.h" #include <windows.h> #include <iostream> #include <iomanip> using namespace...
Использование указателей C++
Всем привет, вот изучаю помалу С++. И уже третий час немогу впарится в Указатели недаётся мне это, вот вроде более менее разобрался, скажите правильно нет: #include <iostream> int main() { ...
C++ Наследование, возврат по ссылке.. http://www.cyberforum.ru/cpp-beginners/thread45847.html
Есть такое В некоторых компьютерных языках, таких как Visual Basic, есть операции, с помощью которых можно выделить часть строки и присвоить ее другой строке. (В стандартном классе string...
C++ Посоветуйте IDE для начинающего Доброго времени суток! Я только начинаю работать с С++, посоветуйте, пожалуйста, какие программы лучше использовать, включая все последние версии (то есть не в духе "новичку и это сойдет":)), чтобы... подробнее

Показать сообщение отдельно
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.08.2009, 06:51
C
1
2
3
4
struct node {
    char *pString;
    struct node *pNext;
};
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdlib.h>
#include <string.h>
 
/* DuplicateLine:  создаёт копию строки l в памяти */
char *DuplicateLine(const char *l)
{
    char *p;
    
    if ((p = (char *) malloc(strlen(l)+1)) != NULL);
        strcpy(p, l);
    return p;
}
 
/* FreeLine:  высвобождает строку l из памяти */
void FreeLine(const char *l)
{
    free((void *) l);
}
C
1
2
3
4
    if (!SearchNodeList())
        AddNodeList();
    PrintList();
    DestroyList();
для каждой строки, которую прочитал из файла, проводишь поиск по списку (начинается всё с пустого списка) и, если её в списке нет, создаёшь для неё узел и добавляешь его в конец списка
когда файл прочитан, переоткрываешь его и записываешь список

создание узла, если его нет
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdlib.h>
 
void *CreateNode(const char *l)
{
    struct node *p;
 
    if ((p = malloc(sizeof(struct node))) == NULL)
        return NULL;
    p->pString = DuplicateLine(l);
    p->pNext = NULL;
    return (void *) p;
}
добавление узла в список (если его нет)
C
1
2
3
4
5
6
7
8
9
void AddNodeList(struct node **ppTail, const char *l)
{
    struct node *p;
 
    if ((p = CreateNode(l)) == NULL)
        return;
    (*ppTail)->next = p;
    *ppTail = p;
}
всё время хранишь указатель на хвост, чтобы каждый раз весь список не проходить

а попроще - массив указателей на строки, вместо узлов просто строки в массиве указателей
тоже поиск проводишь, если строки нет, добавляешь её, индекс строк переставляешь (который считает сколько строк в массиве записано) и дальше двигаешь - имеет ограничение, придётся определиться сколько всего строк в файле может быть

со списком будет выделяться ровно столько памяти, сколько будет нужно для строк, если там их две три или ноль, а с указателями всегда будет нужно выделить максимально большой массив, чтобы не случилось так, что строки в файле ещё есть, а массив до края заполнился и выводится (хотя остались ещё необработанные строки)
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru