IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

 
 Ответить  Открыть новую тему 
> сортировка символьного массива, С++
Tribunal
сообщение 11.10.2006 15:51
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


мне нужно отсортировать массив записей,содержащих наименования алфавитном порядке.
как это сделать в с++ я понятия не имею.

подскажите,пожалуйста,как это сделать.

буду благодарна за помощь.


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.10.2006 16:01
Сообщение #2


Гость






С:
используем qsort

C++:
используем std::vector.sort
 К началу страницы 
+ Ответить 
Tribunal
сообщение 11.10.2006 16:55
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


а если подробно описывать.
в смысле без стандартных вот этих функций:?

и кстати как можно в тексте программы сравнить символьную величину с конкретным словом?


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.10.2006 17:39
Сообщение #4


Гость






Цитата(Tribunal @ 11.10.2006 15:55)
а если подробно описывать.
в смысле без стандартных вот этих функций:?
Тогда вот тебе пример... Разбирайся... (сортировка взята из нашего FAQ-а)...
#include <string.h>

#define n 10

typedef struct tagT {

  char title[20];
  double price;

} T;

int main() {
  int i, j;
  T arr[10] = {
	{"1234", 10.0},
	{"a234", 10.0},
	{"u234", 10.0},
	{"f234", 10.0},
	{"m234", 10.0},
	{"gg34", 10.0},
	{"er34", 10.0},
	{"op34", 10.0},
	{"ni34", 10.0},
	{"ab34", 10.0}
  };

  T buffer;

  printf("before:\n");
  for(i = 0; i < 10; ++i)
	printf("%10s (%f)\n", arr[i].title, arr[i].price);

  for(i = 0; i < n; ++i)
	for(j = n - 1; j >= i; --j) {
	  if(strcmp(arr[j - 1].title, arr[j].title) > 0) {

		memmove(&buffer, &arr[j - 1], sizeof(T));
		memmove(&arr[j - 1], &arr[j], sizeof(T));
		memmove(&arr[j], &buffer, sizeof(T));

	  }
	}

  printf("after:\n");
  for(i = 0; i < 10; ++i)
	printf("%10s (%f)\n", arr[i].title, arr[i].price);

  return 0;
}


Цитата(Tribunal @ 11.10.2006 15:55)
и кстати как можно в тексте программы сравнить символьную величину с конкретным словом?
Смотри выше (функция strcmp из string.h... Я надеюсь, переписывать функции сравнения строк ты не будешь? unsure.gif )
 К началу страницы 
+ Ответить 
Tribunal
сообщение 16.10.2006 16:30
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


вот то,что у меня получилось.
компилируется,но выдает ошибку приложения.
не подскажете,в чем может быть проблема?

#include <iostream.h>
#include <fstream.h>
#include <string.h>

int main()
{
	ofstream fout("output.txt");

	typedef struct tagT
	{
		char descr_goods [20]; //наименование товара
		char name_shop [20];   //название магазина
		int good_value;		//стоимость товара
	} T;

	int n=3; //кол-во записей
	T list [n];

	//вводим данные
	cout << "name goods - name shop - good value" << endl;
	for (int i=0;i<n;i++)
	{
		cout << "Memo " <<i+1 << endl;
		cin >> list[i].descr_goods;
		cin >> list[i].name_shop;
		cin >> list[i].good_value;
		fout << list[i].descr_goods << " - " << list[i].name_shop << " - " << list[i].good_value << "rub" << endl;
	};

	//сортируем по названиям магазинов
	T buf;
	for (int i=0;i<n;i++)
	 for (int j=n-1;j>=i;j--)
	 {
		 if (strcmp(list[j-1].name_shop,list[j].name_shop)>0)
		 {
			 memmove (&buf, &list[j-1], sizeof(T));
			 memmove (&list[j-1],&list[j], sizeof(T));
			 memmove (&list[j], &buf, sizeof(T));
		 };
	 };

	//запрос на ассортимент в магазине
	char rep [3];
	char name [20];
	cout << "Vivesti info o tovarax magazinov?";cin >> rep;
	if (strcmp(rep,"yes")==0)
	{
		cout << "Vvedite nazvanie magazina:";cin >> name;
		int k=0;
		for (int i=0;i<n;i++)
			 if (strcmp(list[i].name_shop,name)==0)
			{
				cout << list[i].descr_goods << " - " <<list[i].good_value<< "rub" << endl;
				k++;
			};
		if (k==0) cout << "Takogo magazina v baze net=(";
	}
	else cout << "Ok!V sleduyuschiy raz=)";

	//записываем в файл изменения
	for (int i=0;i<n;i++)
	{
		fout << list[i].descr_goods << " - " << list[i].name_shop << " - " << list[i].good_value << "rub" << endl;
	};
	
}



--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 16.10.2006 18:15
Сообщение #6


Гость






Хм... Выход за нижнюю границу массива. Странно, Турбо С не ловит это. Поймал на MinGW... Исправь:
	//сортируем по названиям магазинов
	T buf;
	for (int i=0;i<n;i++)
	 for (int j=n-1;j>=i+1;j--) // <--- Добавлено +1


ну, или так:
	//сортируем по названиям магазинов
	T buf;
	for (int i=0;i<n;i++)
	 for (int j=n-1;j>i;j--)


Хотя я бы не рекомендовал тебе делать такую солянку из С и С++... Или одно, или другое...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 29.07.2025 10:00
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"