Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   сравнение двух массивов строк в Си (http://forum.oszone.net/showthread.php?t=48814)

bool 01-05-2005 15:55 320819

сравнение двух массивов строк в Си
 
вообщем нужна программа для подготовки и сохранения в файле информации о маршрутиах городского транспорта.И программа которая должна формировать список маршрутов которые отправляются от заданного начального пункта в заданный конечный пункт.
Программу подготовки я написал. Использовал структуру :
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 320828

strcmpi пробовали?
или можно вложенный цикл - сравнивать кажный символ

hasherfrog 02-05-2005 00:29 320872

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

bool 02-05-2005 18:52 320994

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

pva 04-05-2005 13:55 321564

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

aESThete 04-05-2005 17:04 321635

to bool
Цитата:

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


Время: 23:14.

Время: 23:14.
© OSzone.net 2001-