Войти

Показать полную графическую версию : сравнение двух массивов строк в Си


bool
01-05-2005, 15:55
вообщем нужна программа для подготовки и сохранения в файле информации о маршрутиах городского транспорта.И программа которая должна формировать список маршрутов которые отправляются от заданного начального пункта в заданный конечный пункт.
Программу подготовки я написал. Использовал структуру :
rasp{
char numb[10];
char vid[20];
char nach_punkt[15];
char kon_punkt[15];
char vremya[10];
}spisok[kol];
всё нормально сохраняется.
вот текст второй программы для поиска нужной информации:

# include <stdio.h>
# include <stdlib.h>
# define kol 20
struct rasp {
char numb[10];
char vid[20];
char nach_punkt[15];
char kon_punkt[15];
char vremya[10];
}spisok[kol];
void init_list(void), load(void),list(void);
int main(void)
{
char choice;
char n[15];
char k[15];
int t;
init_list();
load();
printf("Введите начальный пункт: ");
gets(n);
printf("Введите конечный пункт: ");
gets(k);
for(t=0;t<kol;++t)
if(spisok[t].numb[0] && n[0] && k[0]) {
if(spisok[t].nach_punkt==n && spisok[t].kon_punkt==k){
printf("%s\n",spisok[t].numb);
printf("%s\n",spisok[t].vid);
printf("%s\n",spisok[t].nach_punkt);
printf("%s\n",spisok[t].kon_punkt);
printf("%s\n",spisok[t].vremya);}}
getch();
}
void init_list(void)
{
register int t;
for(t=0; t<kol; ++t) spisok[t].numb[0]='\0';
}
void load(void)
{
FILE *fp;
register int i;
if((fp=fopen("bd","rb"))==NULL){
printf("Ошибка при открытии файла.\n");
return;
}
init_list();
for(i=0;i<kol;i++)
if(fread(&spisok[i],sizeof(struct rasp),1,fp)!=1){
if(feof(fp)) break;
printf("Ошибка при чтении файла.\n");
}
fclose(fp);
}

вообщем не правильно , результата нет никакого. Пробывал сравнивать первые символы в массивах, всё нормально получается :
if(spisok[t].nach_punkt[0]==n[0] && kon_punkt==k[0])
что то заклинило меня 8) не могу написать, чтобы строки сравнивал 8(

aESThete
01-05-2005, 17:13
strcmpi пробовали?
или можно вложенный цикл - сравнивать кажный символ

hasherfrog
02-05-2005, 00:29
bool
В языках С и С++ сроки бывают нескольких видов. Классы мы рассматривать не будем, тем более, что у Вас используются как раз класссические zero-terminated строки. В этом случае строкой называется массив символов, оканчивающийся байтом 0x00, т.е. нулём. Строки в таком слачае сравнивают побайтовым сравнением символов такого массива. Строки равны, если попарно равны все символы массивов. Почитайте про strcmp и разновидности (strncmp). Кроме того. в Вашем случае стоит не забыть и приведение символов обеих строк к верхнему (нижнему) регистру, потому что с точки зрения strcmp символ 'A' не равен 'a'

bool
02-05-2005, 18:52
aESThete hasherfrog
огромное спасибо 8) я только в стадии изучении Си, до этих функций ещё не дошёл 8)))) вообщем выручили , спасибо!!

pva
04-05-2005, 13:55
Вообще-то это классическая задача для SQL-сервера. Может перераспределить усилия? Если это не курсовой, а, скажем, реальная вещь, может поделитесь результатом? А то по атласу как-то муторно искать...

aESThete
04-05-2005, 17:04
to bool
вообщем нужна программа для подготовки и сохранения в файле информации о маршрутиах городского транспорта.И программа которая должна формировать список маршрутов которые отправляются от заданного начального пункта в заданный конечный пункт.
дополнительные условия, ограничения имеются?
поделитесь успехами, интересно, что в конце концов получится
pva
я так понял, судя по реализации на "голом" Cи, что это именно учебное задание




© OSzone.net 2001-2012