Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 21.04.2009, 19:46   #1
Armina
в учёбе
 
Регистрация: 18.04.2009
Сообщений: 8
По умолчанию указатели

всем здравствуйте! посмотрите пожалуйста мою задачку, не знаю почему она не работает. Задание было такое: дан файл, в первой строчке написано слово u, на второй - v, на третьей - некоторый текст Т. Найти в тексте Т слово u и заменить его на v. Всё это реализовать надо с помощью указателей.
я написала код, tt это структура, состоящая из двух полей, одно содержит букву слова, другая является ссылкой на следующий элемент. функция tt находит начало слова u в тексте Т, прогоняет по всем позициям. фкц found сравнивает t->next, т.е. того что идёт в тексте со словом u. Помогите пожалуйста))

Код:
#include <iostream.h>
#include <fstream.h>

struct tt{
	int data;
	tt* next;
}


tt* adress(tt* t, tt* u)
{
	while (t->next != NULL)
	{
		if(found(t->next, u))
			return t;
		t = t->next;
	}
	return 0;
}

bool found(tt* nach, tt* nach1)
{
	while(nach1 != NULL)
	{
		if((nach != NULL) || (nach->data != nach1->data))
			return 0;
		nach = nach->next;
		nach1 - nach1->next;
	}
	return 1;
}

void main()
{
	ifstream f;
	ofstream out;
	f.open("data.txt");
	out.open("out.txt");
	tt *u = new(tt);
	tt *a = u;
	while (f.peek() != '\n')
	{
		f.get(a->data);
		a->next = new(tt);
		a = a->next;
	}
	f.get();
	tt* v = new(tt);
	a = v;
	while (f.peek() != '\n')
	{
		f.get(a->data);
		a->next = new(tt);
		a = a->next;
	}
	f.get();
	tt* t;
	a = t;
	while (!f.eof())
	{
		f.get(a->data);
		a->next = new(tt);
		a = a->next;
	}
	f.get();
	while (adress(t,u) != 0)
	{
		tt* q = adress(t,u);
		tt* p = q->next;
		tt* temp = u;
	}
	while (temp != NULL)
	{
		tt* z = p->next;
		delete(p);
		p = z;
		temp = temp->next;
	}
	tt* v1 = v;
	while (v1 != NULL)
	{
		q->next = new(tt);
		q = q->next;
		q->data = v1->data;
		v1 = v1->next;
	}
	q->next = p;
	tt* n = t;
	while (n != NULL)
	{
		out << n->data;
		n = n->next;
	}
}
armina

Последний раз редактировалось MaTBeu; 22.04.2009 в 22:07.
Armina вне форума
Старый 21.04.2009, 20:49   #2
Pashan
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 89
По умолчанию

До конца не досмотрел, но есть идея. Там по коду подразумевается, что вложенность в структуре tt идет, пока next не станет NULL'ом. При этом в NULL указатель next никто и нигде не инициализирует.
Pashan вне форума
Старый 22.04.2009, 15:20   #3
Armina
в учёбе
 
Регистрация: 18.04.2009
Сообщений: 8
По умолчанию

эмм.. а как тогда сделать?
armina
Armina вне форума
Старый 22.04.2009, 16:33   #4
Pashan
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 89
По умолчанию

Цитата:
а как тогда сделать?
Путем присваивания next = NULL

Лучше всего добавить в структуру tt конструктор, который будет это делать сам, при создании каждого объекта. Кстати, а удаление лучше в деструктор засунуть, чтобы удалив самый верхний объект, удалилась бы вся цепочка. Как-то так:

Код:
struct tt{
  int data;
  tt* next;

  tt():
    data(0), next(NULL)
  {
  }

  ~tt()
  {
    delete next;
  }
}
Кстати, для добавления под-элементов, я бы тоже метод завел бы:
Код:
  tt* AddElement(int dat)
  {
    next = new tt();
    next->data = dat;
    return next;
  }

Последний раз редактировалось Pashan; 22.04.2009 в 16:43.
Pashan вне форума
Старый 22.04.2009, 20:05   #5
Armina
в учёбе
 
Регистрация: 18.04.2009
Сообщений: 8
По умолчанию

спасибо спасибо спасибо)) надеюсь и верю,что работать будет! ))
armina
Armina вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатели Mango Помощь студентам 2 09.12.2008 12:15
Указатели JOFRIF Общие вопросы C/C++ 2 31.08.2008 18:34
Указатели Принц Общие вопросы C/C++ 2 08.06.2008 16:15
Указатели в Си Иллидан Общие вопросы C/C++ 7 20.02.2008 11:14
Указатели Си JET_FLASH Общие вопросы C/C++ 2 31.01.2008 23:02