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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2011, 00:35   #11
narcot
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 11
По умолчанию

я решил оставить вот так :
Код:
// 5.1.cpp : Defines the entry point for the console application.
//

/*
С  помощью  двунаправленного  списка  определить,  является  ли 
строка палиндромом (т.е. одинаково читается справа налево и слева 
направо). Пробелы и знаки пунктуации – игнорировать.
*/

#include "stdafx.h"
#include "stdlib.h"
#include "conio.h"

typedef struct palindrome
{
	char data;
	palindrome *next, *prev;
};

palindrome *head = NULL, *tail = NULL;

void Insert(char data);
void Display(int len);
int check(char data);
int length(char *text);

int _tmain(int argc, _TCHAR* argv[])	//65..90; 97..122; 48..57;
{
	char text[20]; int i, len;
	printf("Enter your text : \n");
	gets(text);
	len = length(text);
	for (i = 0; i < len; i++)
	{
		if(check(text[i]))
			Insert(text[i]);
	}
	Display(len);
	getch();
	return 0;
}

int length(char *text)		//65..90; 97..122; 48..57;
{
	int i = 0;
	while(text[i] != '\0')
	{
		i++;
	}
	return i;
}

void Insert(char data)
{
	palindrome * temp = (palindrome *)malloc(sizeof(palindrome));
	temp->data = data;
	if (!head)
	{
		temp->prev = NULL;
		temp->next = NULL;
		head = temp;
		tail = temp;
	}
	else
	{
		tail->next = temp;
		temp->prev = tail;
		temp->next = NULL;
		tail = temp;
	}
}

int check(char data)
{
	switch (data) 
	{
	case ' ' :
		return false; 
		break;
	case '.' :
		return false;
		break;
	case ',' :
		return false;
		break;
	case ';' :
		return false;
		break;
	case '!' :
		return false;
		break;
	case '?' :
		return false;
		break;
	case '"' :
		return false;
		break;
	case ':' :
		return false;
		break;
	case '-' :
		return false;
		break;
	default :
		return true;
	}
}

void Display(int len)
{
	int i = 1, j = 1;
	palindrome *hd = head, *tl = tail;
	len /= 2;
	for (i = 1; i <= len; i++)
	{
		if (hd->data == tl->data)
			j++;
		tl = tl->prev;
		hd = hd->next;
	}	
	if (i == j)
		printf("It's a palindrome ;)");
	else
		printf("It's not a palindrome :(");	
}
Думаю, нармуль будет
narcot вне форума Ответить с цитированием
Старый 27.05.2011, 20:36   #12
narcot
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 11
По умолчанию

вот бы кто переделал под локальный переменные и добавил освобождение памяти
narcot вне форума Ответить с цитированием
Старый 27.05.2011, 21:03   #13
_Alerter_
Пользователь
 
Регистрация: 25.05.2011
Сообщений: 89
По умолчанию

Код:
#include "stdafx.h"
#include "stdlib.h"
#include "conio.h"

typedef struct palindrome
{
	char data;
	palindrome *next, *prev;
};

void Insert(char data, palindrome ** head, palindrome ** tail);
void Display(int len, palindrome ** head, palindrome ** tail);
int check(char data);
int length(char *text);
void FreeMem(palindrome ** hd, palindrome ** tl);

int _tmain(int argc, _TCHAR* argv[])	//65..90; 97..122; 48..57;
{
	char text[20]; int i, len;
	palindrome *head = NULL, *tail = NULL;
	printf("Enter your text : \n");
	gets(text);
	len = length(text);
	for (i = 0; i < len; i++)
	{
		if(check(text[i]))
			Insert(text[i], &head, &tail);
	}
	Display(len, &head, &tail);
	if (head)
		FreeMem(&head, &tail);
	getch();
	return 0;
}

int length(char *text)		//65..90; 97..122; 48..57;
{
	int i = 0;
	while(text[i] != '\0')
	{
		i++;
	}
	return i;
}

void Insert(char data, palindrome ** head, palindrome ** tail)
{
	palindrome * temp = (palindrome *)malloc(sizeof(palindrome));
	temp->data = data;
	if (!(*head))
	{
		temp->prev = NULL;
		temp->next = NULL;
		*head = temp;
		*tail = temp;
	}
	else
	{
		(*tail)->next = temp;
		temp->prev = *tail;
		temp->next = NULL;
		(*tail) = temp;
	}
}

int check(char data)
{
	switch (data) 
	{
	case ' ' :
		return false; 
		break;
	case '.' :
		return false;
		break;
	case ',' :
		return false;
		break;
	case ';' :
		return false;
		break;
	case '!' :
		return false;
		break;
	case '?' :
		return false;
		break;
	case '"' :
		return false;
		break;
	case ':' :
		return false;
		break;
	case '-' :
		return false;
		break;
	default :
		return true;
	}
}

void Display(int len, palindrome ** head, palindrome ** tail)
{
	int i = 1, j = 1;
	palindrome *hd = *head, *tl = *tail;
	len /= 2;
	for (i = 1; i <= len; i++)
	{
		if (hd->data == tl->data)
			j++;
		tl = tl->prev;
		hd = hd->next;
	}	
	if (i == j)
		printf("It's a palindrome ;)");
	else
		printf("It's not a palindrome :(");	
}

void FreeMem(palindrome ** hd, palindrome ** tl)
{
	palindrome * temp = (*hd)->next;
	while (temp)
	{
		free(temp->prev);
		temp = temp->next;
	}
	free(*tl);
}

Последний раз редактировалось _Alerter_; 27.05.2011 в 22:27.
_Alerter_ вне форума Ответить с цитированием
Старый 28.05.2011, 21:12   #14
narcot
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 11
По умолчанию

спасибо огромное.
кстати, я сам даже правильно функцию freemem написал
narcot вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двусвязный список(C++) fable0097 Помощь студентам 0 16.05.2011 16:03
Двусвязный список decantnik Паскаль, Turbo Pascal, PascalABC.NET 0 09.05.2011 00:58
Двусвязный список Work Group Паскаль, Turbo Pascal, PascalABC.NET 12 13.07.2010 01:44
двусвязный список Work Group Помощь студентам 0 24.05.2010 21:27
двусвязный список klykovka Помощь студентам 8 22.05.2010 18:58