Показать сообщение отдельно
Тема: офф:С++ | by Feo
Непрочитано 19.06.2009, 17:02   # 6
Котэ
 
Аватар для Feo
 
Регистрация: 04.04.2009
Адрес: Таганрог
Возраст: 33
Сообщений: 823
Записей в дневнике: 3
Байк: Bionic b5r
Feo вне форума
Код:
#include <iostream>
#include <windows.h>
#include <cmath> 
using namespace std;

// определение структуры, с помощью которой будет реализовываться 
// список строк
struct StringList
{
	char* pStr; // строка (указатель на неё)
	StringList* pNext; // указатель на следующий элемент списка
};


void main()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	
	StringList* pList = NULL;	// указатель на начало списка
	StringList* pCurrentElement = NULL; // указатель на текущий элемент списка

	char c = 'n';
	do
	{
		cout << "Введите строку в список " << endl;
		char* str = new char[100];
		// Ввод строки длиной максимум 99 символов
		_flushall();
		cin.getline(str, 99);
		StringList* pNewElement = new StringList;
		
		// создание нового элемента
		pNewElement->pNext = NULL;
		pNewElement->pStr = str;

		// внесение нового элемента в список
		// Если список ещё не создан... 
		if(pList==NULL)
		{
			// инициализировать указатели на начало списка и на текущий элемент списка
			// указателем на только что созданный элемент
			pList = pNewElement;
			pCurrentElement = pNewElement;
		}
		// в противном случае... 
		else
		{
			// установить вновь созданный элемент следующим
			pCurrentElement->pNext = pNewElement;
			// переместить указатель на текущий элемент на вновь созданный
			pCurrentElement = pNewElement;
		}

		cout << "Вы хотите продолжить ввод строк в список (y,n)? ";
		cin >> c;
	}
	while(c=='y');

	c = 'n';
	do
	{
		char c;
		cout << "Введите символ ";
		cin >> c;

		// инициализировать указатель plst адресом первого элемента
		StringList* plst = pList;
		while(plst!=NULL)
		{
			// Если последний символ строки равен введенному...
			if(*(plst->pStr+strlen(plst->pStr)-1)==c)
			{
				// Вывести эту строку на экран
				cout << plst->pStr << endl;
			}
			// переместить указатель на следующий элемент
			plst = plst->pNext;
		};

		// Запрос продолжения процесса
		cout << "Вы хотите продолжить ввод символов (y,n)? ";
		cin >> c;
	}
	while(c=='y');

	// Освобождение памяти, выделенной под массив
	while(pList!=NULL)
	{
		// сохранить указатель на следующий элемент
		StringList* pnext = pList->pNext;
		// освободить память, выделенную под текущий
		delete pList;
		// установить указатель pList на следующий элемент
		pList = pnext;
	};
}
ура!! есть тег [code]! (Master)
Последний раз редактировалось Master; 19.06.2009 в 20:41.
Цитата