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

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

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

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

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

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

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

Сам я вот кое что написал:

Код:
#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 Check(char data, int len);
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(((int) text[i] >= 48 & (int) text[i] <= 57) ||
		   ((int) text[i] >= 65 & (int) text[i] <= 90) ||
		   ((int) text[i] >= 97 & (int) text[i] <= 122))
			Insert(text[i]);
	}
	Check(*text, len);
	getch();
	return 0;
}

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

void Insert(char value) 
{
    Напишите пожалуйста тело функции
}

И посмотрите правильная ли эта функция:

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

а insert для чего функция то хоть?
Alex071 вне форума Ответить с цитированием
Старый 26.05.2011, 19:43   #3
narcot
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 11
По умолчанию

вставка в список.

я хочу вставлять только буквы и цифры. функция length вернёт количество этих символов. а я пройду с конца и с начала до средины и узнаю, полиндром это или нет.
narcot вне форума Ответить с цитированием
Старый 26.05.2011, 20:34   #4
_Alerter_
Пользователь
 
Регистрация: 25.05.2011
Сообщений: 89
По умолчанию

Код:
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;
	}
}
В функции Check исправь
Код:
tl->prev;
hd->next;
на
Код:
tl = tl->prev;
hd = hd->next;
и параметр data в ней ни к чему
_Alerter_ вне форума Ответить с цитированием
Старый 26.05.2011, 21:22   #5
narcot
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 11
По умолчанию

Код:
// 5.1.19.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')
	{
		if(check(text[i]))
			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)
{
	if(
		((int) data >= 48 & (int) data <= 57) ||
		((int) data >= 65 & (int) data <= 90) ||
		((int) data >= 97 & (int) data <= 122)
	   )
	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;
		i++;
	}	
	if (i == j)
		printf("It's a palindrome ;)");
	else
		printf("It's not a palindrome :(");	
}
Вот так?
всё равно что-то во всех случаях "неполиндром" в ответе.
narcot вне форума Ответить с цитированием
Старый 26.05.2011, 22:27   #6
_Alerter_
Пользователь
 
Регистрация: 25.05.2011
Сообщений: 89
По умолчанию

Код:
((int) data >= 48 & (int) data <= 57) ||
		((int) data >= 65 & (int) data <= 90) ||
		((int) data >= 97 & (int) data <= 122)
&& - логическое И, & - побитовое логическое умножение, замечаешь разницу?
и в функции _tmain у тебя в строке for (i = 0; i < len; i++); ';' лишняя
Код:
for (i = 0; i < len; i++)
	{
		if(check(text[i]))
			Insert(text[i]);
	}
цикл должен просмотреть ВСЮ строку, используй функцию strlen() из string.h
Код:
for (i = 0; i < strlen(text); i++)
В итоге должно получиться так:
Код:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>

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 main()	//65..90; 97..122; 48..57;
{
	char text[20]; int i, len;
	printf("Enter your text : \n");
	gets(text);
	for (i = 0; i < strlen(text); i++)
	{
		if(check(text[i]))
			Insert(text[i]);
	}
	len = length(text);
	Display(len);
	getch();
	return 0;
}

int length(char *text)		//65..90; 97..122; 48..57;
{
	int i = 0;
	while(text[i] != '\0')
	{
		if(check(text[i]))
			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)
{
	if(
		((int) data >= 48 && (int) data <= 57) ||
		((int) data >= 65 && (int) data <= 90) ||
		((int) data >= 97 && (int) data <= 122)
		)
		return 1;
}

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 :(");	
}

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

Код:
// 5.1.19.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)
{
	if(
		((int) data >= 48 && (int) data <= 57) ||
		((int) data >= 65 && (int) data <= 90) ||
		((int) data >= 97 && (int) data <= 122)
	   )
	return true;
}

void Display(int len)
{
	int i = 1, j = 0;
	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;
		i++;
	}	
	if (i == j)
		printf("It's a palindrome ;)");
	else
		printf("It's not a palindrome :(");	
}
всё равно "неполиндром" постоянно
narcot вне форума Ответить с цитированием
Старый 26.05.2011, 22:54   #8
narcot
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 11
По умолчанию

strlen самому надо написать
narcot вне форума Ответить с цитированием
Старый 26.05.2011, 23:08   #9
_Alerter_
Пользователь
 
Регистрация: 25.05.2011
Сообщений: 89
По умолчанию

найди два отличия в фунции Display у меня и у тебя

Последний раз редактировалось _Alerter_; 26.05.2011 в 23:35.
_Alerter_ вне форума Ответить с цитированием
Старый 26.05.2011, 23:59   #10
narcot
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 11
По умолчанию

int i = 1, j = 1;
даже с этими параметрами не то
всё нашёл. бугага

Последний раз редактировалось narcot; 27.05.2011 в 00:04.
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