Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Последовательность символов. Список. 
:(
    Опции темы
DimanNSK
  Дата 3.3.2010, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.3.2009

Репутация: нет
Всего: нет



Здравствуйте. Нужна помощь.
Есть задача: дана последовательность символов оканчивающаяся точкой удалить все символы, у которых равные соседи (первый и последний считать соседями). Последовательность представлена в виде двунаправленного циклического списка.
Код

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
#define INPUT_FILENAME "input.txt"
#define OUTPUT_FILENAME "output.txt"
 
struct characters {
        char data;
        characters* next;
        characters* prev;
};
 
characters* readList (FILE* file);
void deleteChars(characters* ch);
void writeList(FILE* file, characters* ch);
 
int main()
{
        FILE *read, *write;
        characters* qList;
 
        if ((read = fopen(INPUT_FILENAME, "r")) == NULL) {
                printf("\nError. Can't open file %s.", INPUT_FILENAME);
        }
        qList = readList(read);
        fclose(read);
 
        if ((write = fopen(OUTPUT_FILENAME, "w")) == NULL) {
                printf("\nError. Can't open file %s.",OUTPUT_FILENAME);
        }
        deleteChars(qList);
        writeList(write, qList);
        fclose(write);
 
        _getch();
        return 0;
}
 
characters* readList (FILE* file)
{
        characters *ch, *head;
        char c;
 
        head = new characters;
        ch = head;
 
        while ((c = fgetc(file)) != '.')
        {
                ch->next = new characters;
                ch->next->prev = ch;
                ch->data = c;
                ch = ch->next;
        }
 
        ch->next=head;
        head->prev = ch;
 
        return head;
}
 
void deleteChars(characters* ch)
{
        characters* head = ch;
 
        while (ch != head)
        {
                if (ch->prev->data == ch->next->data) {
                        ch->next->prev = ch->prev;
                        ch->prev->next = ch->next;
                        delete ch;
                }
                ch = ch->next;
        }
        ch = head;
}
 
void writeList(FILE* file, characters* ch)
{
        characters* head = ch;
 
        while (ch->next != head)
        {
                fprintf(file, "%c", ch->data);
                ch = ch->next;
        }
}

Программа работает некорректно, а конкретно не удаляет символы. Где может быть ошибка?
PM MAIL   Вверх
Peter
Дата 4.3.2010, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 28.7.2003
Где: Ставрополь

Репутация: нет
Всего: 1



Смотрим последовательность действий в deleteChars(). После операции
Код
delete ch;
идет
Код
ch = ch->next;
Можно ожидать, что программа будет грохаться.


--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
andDavid
Дата 5.3.2010, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.2.2010

Репутация: нет
Всего: нет



дебажь программу ))) и узнаешь где ошибка )
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.