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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2009, 18:06   #1
napanin
Пользователь
 
Регистрация: 07.06.2009
Сообщений: 12
Печаль С++ Ошибка!

у меня проблема в следующем: дано задание - "Написать шаблон функции изменения порядка элементов в массиве на обратный. Параметр шаблона – тип элементов. Для типа char* написать специализацию этого шаблона, когда будут меняться местами не только строки, но и символы в этих строках. Пример: abc, def, ghi преобразовать в ihg, fed, cba."; всё сделал, но вылетает окно с ошибкой. не могу понять в чём косяк
вот сам код:

#include<iostream>
#include<cstring>
//#include <cmath>

using namespace std;
template<typename S> void Sort(S *A, int n)
{
S *min;
for (int i=0; i<n-1; i++)
{
min=A[i];
int k=i;
for (int j=i+1; j<n; j++)
if (A[j]<min)
{
min=A[j];
int k=j;
}
A[k]=A[i];
A[i]=min;

}
//cout<<"preobrazovanay stroka :"<<'\t'<<'\"'<<A<<'\"'<<endl;
}

template <> void Sort(char**A, int n)
{
char *min;
int L=strlen(*A);
for (int i=0; i<n-1; i++)
{
min=A[i];
int k=i;
for (int j=i+1; j<n; j++)
if (strcmp(A[j],min)<0)
{
min=A[j];
k=j;
}
A[k]=A[i];
A[i]=min;

min=A[i];
for (int i=0;i<(L-1)/2;i++)
{ char *c=A[i];
A[i][0]=A[L-1-i][0];
A[L-1-i]=c;
}
}

}
template <typename S>
void print(S* A, int n)
{
for (int i=0; i<n; i++)
cout<<A[i]<<' ';
cout<<endl;
}

void main()
{
char *C[]={"BDFfds", "ABC", "AAC"};
cout<<"do sortirovki"<<endl;
print(C,3);
cout<<"posle sortirovki"<<endl;
Sort(C,3);
print(C,3);
}

Последний раз редактировалось napanin; 07.06.2009 в 18:18.
napanin вне форума Ответить с цитированием
Старый 07.06.2009, 20:12   #2
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Цитата:
Написать шаблон функции изменения порядка элементов в массиве на обратный. Параметр шаблона – тип элементов. Для типа char* написать специализацию этого шаблона, когда будут меняться местами не только строки, но и символы в этих строках. Пример: abc, def, ghi преобразовать в ihg, fed, cba."
Код:
#include <iostream>

using namespace std;

template<typename T> void rotate(T arr[], int size)
{
	T *buff = new T[size];
	for(int i = 0; i < size; ++i)
		buff[i] = arr[i];

	for(int i = 0; i < size; ++i)
		arr[i] = buff[size - i - 1];
	delete[] buff;
}
template<> void rotate(char *a, int len){
	char *buff = new char[len + 1];
	strcpy(buff, a);
	for(int i = 0; i < len; ++i)
		a[i] = buff[len - i - 1];
	delete[] buff;
}


template<> void rotate(char **arr,int size)
{
	char **a = new char*[size];
	for(int i = 0; i < size; ++i){
		a[i] = new char[strlen(arr[i]) + 1];
		strcpy(a[i], arr[i]);
		rotate(a[i],strlen(a[i]));
	}
	for(int i = 0; i < size; ++i)
		strcpy(arr[i],a[size - i - 1]);

	for(int i = 0; i < size; ++i)
		delete[] a[i];
	delete[] a;
}

int main()
{
	char **s = new char*[5];
	s[0] = new char[7]; strcpy(s[0],"aassdd");
	s[1] = new char[7]; strcpy(s[1],"ooppii");
	s[2] = new char[7]; strcpy(s[2],"rrttee");
	s[3] = new char[7]; strcpy(s[3],"ddaacc");
	s[4] = new char[7]; strcpy(s[4],"yyuurr");

	for(int i = 0; i < 5; ++i)
		cout << s[i] << endl;

	rotate(s,5);
	cout << "----------------------------------\n";

	for(int i = 0; i < 5; ++i)
		cout << s[i] << endl;

	for(int i = 0; i < 5; ++i)
		delete[] s[i];
	delete[] s;


	int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
	rotate(arr,9);
	for(int i = 0; i < 9; ++i)
		cout << arr[i] << " ";
	cout <<"\n";

	return 0;
}
Результат
Цитата:
aassdd
ooppii
rrttee
ddaacc
yyuurr
----------------------------------
rruuyy
ccaadd
eettrr
iippoo
ddssaa
9 8 7 6 5 4 3 2 1
Press any key to continue . . .
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 11.06.2009, 18:46   #3
napanin
Пользователь
 
Регистрация: 07.06.2009
Сообщений: 12
По умолчанию

Большое спасибо за проделанный труд!
napanin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функции в С++ в программе Борланд Си... Считает не то, спасите плиззз... Алекс...))) Помощь студентам 3 30.03.2009 20:58
Спасите скоро сессия !!! PavelSS Паскаль, Turbo Pascal, PascalABC.NET 28 24.12.2008 08:15
Товарищи многомудрые програмисты!!! Спасите бедную студентку ) eliana Паскаль, Turbo Pascal, PascalABC.NET 3 04.06.2008 16:37