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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2010, 15:40   #1
Silveria
Новичок
Джуниор
 
Регистрация: 12.05.2010
Сообщений: 2
По умолчанию поиск в структуре

Существует такая структура



Код:
struct book				//структура "Книга" на 7 элементов
	{
		int date_izd;		//год издания книги
		char book_name[30];	//название книги
		char author[21];  	//автор книги
		char zhanr[11];		//жанр книги
		int price;		//стоимость книги
		int rate;			//рейтинг популярности книги
		int id;			//ID номер книги

	};

все элементы структуры инициализируются, вот так например:


Код:
 ar[0].date_izd = 1868;
	strcpy (ar[0].book_name, "Война и мир");
	strcpy (ar[0].author, "Толстой");
	strcpy (ar[0].zhanr, "Роман");
	ar[0].price=250;
	ar[0].rate=9;
	ar[0].id=1;


Как организовать поиск по элементам структуры, содержащие русские буквы?

Например пользователь вводит "Войн" и результатом поиска должно быть, скажем вот так :


Код:
cout<<"Найдено!!\n"<<"Название\t"<<"Год издания\t"<<"Автор\t"<<"Жанр\t"
<<"Стоимость\t"<<"Рейтинг\t"<<"ID\n"<<ar[i].book_name<<"\t"<<ar[i].date_izd<<"\t\t"<<ar[i].author<<"\t"<<ar[i].zhanr<<"\t"<<ar[i].price<<"\t"<<ar[i].rate<<"\t"<<ar[i].id<<endl<<endl;


Спасибо заранее

Последний раз редактировалось Stilet; 12.05.2010 в 16:24.
Silveria вне форума Ответить с цитированием
Старый 12.05.2010, 15:59   #2
Alex_sim
Форумчанин
 
Аватар для Alex_sim
 
Регистрация: 18.02.2010
Сообщений: 164
По умолчанию

оформи код в тегах я тебе пример подобный кину думаю разберешься
если что спрашивай
Код:
struct block {
	int number;
	char color[16];
	char mat[16];
	unsigned int rbr;
};

FILE *f;

void menu(void) {
	printf(
		"\n"
		"1. Добавление кубиков.\n"
		"2. Список Кубиков .\n"
		"3. Поиск кубика.\n"
		"9. Выйти.\n\n"
	);
}

int main() {
	setlocale( LC_ALL, "Russian" );
	
	// Открытие файла ------------------------------
	f = fopen( "kub.dat", "ab+" );
	if( f == NULL )
	{
		printf( "Не могу открыть 'kub.dat'. Нажмите клавишу...\n" );
		_getch();
		return -1;
	}
	int ans;
	menu();

	char c;
	while(true) {
		printf( "\rВыберите режим работы: " );
		c = _getche();
		block t;
		switch (c) {
			case '1': // Добавление 
				printf( "\n\nПополнение списка 'kub.dat'.\n"
						"Для выхода в главное меню введите 0 .\n\n" );
				fseek( f, 0, SEEK_END );
				while( true )  {
					printf( "Номер: " );
					scanf_s( "%d", &t.number );
					if( t.number==0 ) break;

					printf( "Цвет: " );
					scanf_s( "%15s%*[^\n]5000s", t.color, 16 );
					if( t.color[0]=='0' ) break;

					printf( "Материал: " );
					scanf_s( "%15s%*[^\n]5000s", t.mat, 16 );
					if( t.mat[0]=='0' ) break;

					printf( "Длина Ребра: " );
					scanf_s( "%d", &t.rbr );
					if( t.rbr==0 ) break;

					fwrite( &t, sizeof(t), 1, f );
					printf( "Информация добавлена.\n\n" );
				}
				menu();
				break;
			case '2': // Просмотр 
				printf(
					"\n\nСписок Кубиков 'kub.dat'\n\n"
					"\tНомер:      \tЦвет:       \tМатериал:    \tДлина ребра:\n" );
				fseek( f, 0, SEEK_SET );
				setlocale( LC_ALL, ".866" );
				while( true ) {
					if( fread( &t, sizeof(block), 1, f ) !=1 ) break;
					printf( "\t%d\t\t%-15s\t%-15s\t%d\n",t.number,t.color, t.mat, t.rbr );//"\t%-15s\t%d\n"//
							}
				setlocale( LC_ALL, ".1251" );
				menu();
				break;
			case '3': // Поиск 
				printf(	"\n\nПоиск кубика по его цвету 'kub.dat'\n\n" );
				char s[16];
				ans = 0;
				/*int sum;
				double h;
				double v;*/
				printf( "Введите цвет: " );
				scanf_s( "%15s%*[^\n]5000s", s, 16 );

				printf(	"\tНомер:      \tЦвет:    \tДлина ребра:\n" );
				fseek( f, 0, SEEK_SET );
				setlocale( LC_ALL, ".866" );
				while( true ) {
					if( fread( &t, sizeof(block), 1, f ) !=1 ) break;
					if( strstr( t.color, s ) != NULL )
					{
						printf( "\t%d\t\t%-15s\t%d\n",t.number,t.color,t.rbr);
						ans +=	(t.rbr*t.rbr*t.rbr);
					}
				}
				printf("Суммарный объем найденных кубиков : %d\n",ans);
				setlocale( LC_ALL, ".1251" );
				menu();
				break;
			case '9': // Выход ---------------------------------------
				fclose(f);
				return 0;
		}
	}
}
Alex_sim вне форума Ответить с цитированием
Старый 12.05.2010, 16:01   #3
Alex_sim
Форумчанин
 
Аватар для Alex_sim
 
Регистрация: 18.02.2010
Сообщений: 164
По умолчанию

обращение к структуре сначала идентификатор структуры затем переменная к которой хочешь обратится
Код:
struct book //структура "Книга" на 7 элементов
{
int date_izd; //год издания книги
char book_name[30]; //название книги
char author[21]; //автор книги
char zhanr[11]; //жанр книги
int price; //стоимость книги
int rate; //рейтинг популярности книги
int id; //ID номер книги

};
book t;\\t идентификатор структуры
printf("%d",t.price);\\выводит результат переменной из структуры

Последний раз редактировалось Alex_sim; 12.05.2010 в 16:11.
Alex_sim вне форума Ответить с цитированием
Старый 12.05.2010, 16:10   #4
Silveria
Новичок
Джуниор
 
Регистрация: 12.05.2010
Сообщений: 2
По умолчанию

не, так не прокатит.
нужно без тэгов, таковы условия выполнения этой домашки (
Silveria вне форума Ответить с цитированием
Старый 12.05.2010, 16:13   #5
Alex_sim
Форумчанин
 
Аватар для Alex_sim
 
Регистрация: 18.02.2010
Сообщений: 164
По умолчанию

тег[сode]код программы [/сode]для того чтоб на форуме код отображался нормально, чтоб его можно было прочитать)
Alex_sim вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение к структуре jey7 Общие вопросы C/C++ 2 07.01.2010 22:44
Указатели, задача по структуре Lees27 Общие вопросы C/C++ 2 22.11.2009 21:16
Замечания к структуре БД artemavd БД в Delphi 13 01.05.2009 19:40
Замечания к структуре БД artemavd БД в Delphi 0 30.04.2009 13:01
ОШИБКА в структуре Panterka Помощь студентам 7 19.12.2007 09:24