Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » многомерные массивы

Ответить
Настройки темы
многомерные массивы

Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Есть прога:
Помогите написать функцию сортировки строк.
Код: Выделить весь код
 
#include <iostream.h>
#include <string.h>
 
// Набор констант, представляющих различные пункты меню
// Непроинициализированная константа имеет значение, на единицу большее предыдущей
enum {ChoiceAddEnd=1, ChoiceInsert, ChoiceDelete, ChoiceDeleteAll, ChoicePrint, ChoiceQuit};
 
int Menu();					// Вывод меню
char** AddLine(char**, int&); // Добавление строки в конец массива
char** InsLine(char**, int&); // Вставка строки в массив
char** DelLine(char**, int&); // Удаление указанной строки из массива
void DelAllLines(char**, int&); // Удаление всех строк массива
void Print(char**, int);		// Распечатка строк массива
bool IsArrayEmpty(int&);		// Проверка на наличие строк в массиве
 
void main()
{
	char **c;	 // Массив строк
	int m = 0;	 // Начальное количество строк массива
	int choice = ChoiceAddEnd;
 
	while (choice != ChoiceQuit)	// Пока не выбран пункт ВЫХОД
	{
		choice = Menu();			// Вывод меню
		cin.ignore(1);			 // Очистка потока ввода
 
		switch (choice)			 // Выбор пункта меню
		{
		case ChoiceAddEnd:
			c = AddLine(c, m);	 // Добавление строки в конец массива
		break;
 
		case ChoiceInsert:
			c = InsLine(c, m);	 // Вставка строки в массив
		break;
 
		case ChoiceDelete:
			if (!IsArrayEmpty(m)) // Если массив не пуст
				c = DelLine(c, m); // Удаление строки
		break;
 
		case ChoiceDeleteAll:
			if (!IsArrayEmpty(m)) // Если массив не пуст
				DelAllLines(c, m); // Удаление всех строк массива
		break;
 
		case ChoicePrint:
			if (!IsArrayEmpty(m)) // Если массив не пуст
				Print(c, m);		// Распечатка массива
		break;
 
		case ChoiceQuit:
		break;
 
		default:					// В остальных случаях
			cout << "Error in choice!\n";
		break;
		}
	}
}
 
char** AddLine(char **c, int &m)
// Добавление строки в конец массива
{
	char str[256];				 // Массив для ввода новой строки
	int n;						 // Длина введенной строки
	int i;
 
	cout << "Input string: ";
	cin.getline(str, 256);		 // Ввод строки
	n = strlen(str);				// Вычисление длины новой строки
 
	if (m == 0)					 // Если массив строк пуст
	{
		m++;
		c = new char*[m];
		c[0] = new char[n + 1];	 // Создаем новую строку в массиве строк
		strcpy(c[0], str);
		return c;
	}
	else
	{
		m++;
		char** t = new char*[m];// Новый массив строк
		for(i = 0; i < m - 1; i++)
		{
			t[i] = c[i];
		}
		t[m - 1] = new char[n + 1];
		strcpy(t[m - 1], str);		 // Копирование новой строки
 
		delete [] c;
		return t;					 // Возврат нового адреса массива строк	}
	}
}
 
char** InsLine(char **c, int &m)
// Вставка строки в массив
{
	char str[256];				 // Массив для ввода новой строки
	int n;						 // Длина введенной строки
	int k;						 // Позиция новой строки в массиве
	int i, j = 0;
 
	cout << "Input string: ";
	cin.getline(str, 256);
	cout << "Input position # (0-" << m << "): ";
	cin >> k;
	while(k < 0 || k > m)		 // Проверка на ошибочный ввод
	{
		cout << "Error !!!\nInput position # (0-" << m << "): ";
		cin >> k;
	}
 
	n = strlen(str);				// Длина новой строки
 
	if (m == 0)					 // Если массив строк пуст
	{
		m++;
		c = new char*[m];
		c[0] = new char[n + 1];	 // Создаем новую строку в массиве строк
		strcpy(c[0], str);
		return c;					 // Возврат нового адреса массива строк
	}
	else
	{
		m++;
		char** t = new char*[m];// Новый массив строк
		for(i = 0; i < m; i++)
		{
			if (i == k)
			{
				t[i] = new char[n + 1];
				strcpy(t[i], str);
				j = 1;
			}
			else
			{
				t[i] = c[i - j];
			}
		}
 
		delete [] c;					// Удаление массива строк 
		return t;					 // Возврат нового адреса массива строк
	}
}
 
char** DelLine(char **c, int &m)
// Удаление указанной строки из массива
{
	int k;					 // Индекс удаляемой строки
	int i, j = 0;
 
	cout << "Input position # (0-" << m - 1 << "): ";
	cin >> k;
	while(k < 0 || k >= m)				// Проверка на ошибочный ввод
	{
		cout << "Error !!!\nInput deleting position #: ";
		cin >> k;
	}
 
	m--;
	char** t = new char*[m];// Создание нового массива строк
	for(i = 0; i < m; i++)
	{
		if (i == k)
			j = 1;
		t[i] = c[i + j];
	}
 
	delete [] c;				// Удаление массива строк
 
	return t;				 // Возврат нового адреса массива строк
}
 
void DelAllLines(char **c, int &m)
// Удаление всех строк массива
{
	for(int i = 0; i < m; i++)
		delete [] c[i];
	delete [] c;				// Удаление всех строк массива
 
	m = 0;
}
 
bool IsArrayEmpty(int &m)
// Возвращает истину, если массив строк пуст; в обратном случае - ложь
{
	if (m == 0)
	{
		cout << "Your line array is empty.\n";
		return true;
	}
	else
		return false;
}
 
int Menu()
// Вывод меню
{
	int choice;
	cout << "\n******* Menu *******\n";
	cout << "1-Add 2-Insert 3-Delete 4-Delete All 5-Print 6-Quit\n";
	cin >> choice;				 // Выбор пункта меню
	if(choice < 0 || choice > 6)	// Проверка выбора
		choice = 0;
	return choice;				 // Возвращение выбранного пункта
}
 
void Print(char **c, int m)
// Распечатка массива строк
{
	for(int i = 0; i < m; i++)
		cout << i << ": " << c[i] << endl;
}

Отправлено: 14:17, 15-01-2006

 

редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Очень уж коряво сделано. в смысле, так, конечно, можно, но... не делает никто, факт.

на тему сортировки

Код: Выделить весь код
#include <stdlib.h>
//...
qsort(c, m, sizeof(char*), strcmp);
всё. Или тоже самое с std::sort и собственной функцией сравнения.

-------
http://ivank.ru


Отправлено: 00:47, 16-01-2006 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Да, тем более, что С++.
Гляньте ещё про STL-овские string-и и vector/map/list-ы.
Если только Вы не на сдачу курсовой по С пишите, съэкономите море времени.
Эти классы (шаблоны классов) сейчас поддерживаются везде.

Отправлено: 01:52, 16-01-2006 | #3

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Если нужны исходники сортировки, загляните в файл algorithm в ваших инклюдах, ищите
template<class Iterator, class Operation> sort(Iterator first, Iterator second, Operation op)

Отправлено: 11:19, 19-01-2006 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » многомерные массивы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - Массивы SS3 Программирование и базы данных 3 29-04-2009 21:47
MySQL массивы XCodeR Вебмастеру 5 28-08-2005 11:42
*Example* | Помогите по C++ (Массивы) Tier9 Программирование и базы данных 3 11-03-2005 09:57
Массивы в С++ Guest Программирование и базы данных 2 27-09-2004 10:12
C++ и массивы ? IG Программирование и базы данных 9 09-06-2003 09:33




 
Переход