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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2022, 22:09   #1
Михаил 125
Пользователь
 
Регистрация: 09.10.2022
Сообщений: 12
По умолчанию Символьные строки в СИ

Здравствуйте, суть программы следующая:В файле хранится список поездов в виде: Пункт_отправления—
Пункт_назначения (например, Москва—Сочи). Количество записей не
ограничено. Определить, сколько поездов идут до заданного пункта.
Вывести их на экран. Я разобрался с выводом пункта отправления и прибытия, но не понимаю что означает условие "сколько поездов идут до заданного пункта" Буду благодарен, если поможете разобраться !
Михаил 125 вне форума Ответить с цитированием
Старый 05.11.2022, 22:15   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Сообщение от Михаил 125 Посмотреть сообщение
о не понимаю что означает условие "сколько поездов идут до заданного пункта"
Имеено это и значит. Если у вас есть поезда Москва-Сочи, Питер-Астрахань, Воронеж-Сочи, Владикавказ-Москва, то сколько идут в Сочи?
p51x вне форума Ответить с цитированием
Старый 05.11.2022, 22:38   #3
Михаил 125
Пользователь
 
Регистрация: 09.10.2022
Сообщений: 12
По умолчанию

p51x, Спасибо, дайте, пожалуйста, наводку как можно написать условие, что поезд доедет до Сочи
Михаил 125 вне форума Ответить с цитированием
Старый 05.11.2022, 23:14   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Москва-Сочи, Питер-Астрахань, Воронеж-Сочи, Владикавказ-Москва
Как вы здесь определили сколько доедет? Каким условием пользовались?
p51x вне форума Ответить с цитированием
Старый 06.11.2022, 10:11   #5
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Вам надо для каждой записи проделать следующее: найти в записи разделитель '—'; все что до разделителя будет пункт отправления; после - пункт прибытия; сравнить все что после разделителя со словом 'Сочи' и посчитать количество совпадений.
macomics вне форума Ответить с цитированием
Старый 08.11.2022, 14:16   #6
Михаил 125
Пользователь
 
Регистрация: 09.10.2022
Сообщений: 12
По умолчанию

macomics,
int main ()
{
char Temp[80], *Tempf, *Temp1;
char s[80];
char c[80];
char Znak []="-";
int i, k=0, l = 0;
FILE *in = fopen("символьные строчки.txt","r");
system("chcp 1251 > nul");

if (in == NULL)
{
printf("\n Файл не открыт");
exit(1);
}

printf ("\nВведите пункт прибытия:\n");
gets(Temp);

Temp1 = strcat(Temp, "\n");

while (fgets(s, 80, in) != NULL)
{
Tempf = strchr (s, '-');

if (Tempf != NULL)
{
Tempf = Tempf + 2;

if (strcmp(Temp1, Tempf) == 0)
{
k++;
puts(s);
}

}

}

fclose(in);
printf ("До Сочи едут %d", k);

}

Что означает Tempf = Tempf + 2;
Михаил 125 вне форума Ответить с цитированием
Старый 08.11.2022, 18:18   #7
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Я убрал несколько лишних строк и прокомментировал цикл
Код:
int main ()
{
  char Temp[80], *Tempf, *Temp1;
  char s[80];
  FILE *in = fopen("символьные строчки.txt","r");
  system("chcp 1251 > nul");
  if (in == NULL)
  {
    printf("\n Файл не открыт");
    exit(1);
  }
  printf ("\nВведите пункт прибытия:\n");
  gets(Temp);
  Temp1 = strcat(Temp, "\n");
  while (fgets(s, 80, in) != NULL)
  {
    Tempf = strchr(s, '-'); // Сейчас Tempf указывает на символ - в буфере s
    if (Tempf != NULL) // Если указатель не равен NULL (символ - найден), тогда
    {
      Tempf = Tempf + 1; // Переходим к следующему символу за символом - (это начало названия пункта прибытия)
      if (strcmp(Temp1, Tempf) == 0) // Сравниваем пукт прибытия считанный в строке s из файла и введенный с клавиатуры (Temp1)
      {
        k++; // При совпадении увеличиваем счетчик и
        puts(s); // Выводим на экран строку файла
      }
    }
  }
  fclose(in);
  printf ("До %s едут %d", Temp1, k);
}
P. S. В следующий раз используйте для размещения кода теги [CODE][/CODE]. Так не придется самому расставлять за вас отступы и исправлять огрехи парсера форума.

ADD: У вас было Tempf = Tempf + 2, возможно, потому, что в строке были пробелы. Но в примере на форуме вы указали пункты прибытия и назначения через дефис и без пробелов, поэтому я исправил на 1.

Последний раз редактировалось macomics; 08.11.2022 в 18:22.
macomics вне форума Ответить с цитированием
Старый 09.11.2022, 15:48   #8
Михаил 125
Пользователь
 
Регистрация: 09.10.2022
Сообщений: 12
По умолчанию

macomics, Спасибо Вам огромное, очень помогли, особенно с комментариями
Михаил 125 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си, символьные строки Artemii21 Помощь студентам 7 04.04.2020 23:38
Символьные строки andriy1048 Помощь студентам 5 30.06.2015 16:27
Символьные строки в Си Вероника99 Помощь студентам 2 16.12.2013 21:12
Символьные строки. Си. meta Помощь студентам 2 24.05.2011 16:40
Символьные строки Арнис Общие вопросы C/C++ 1 13.07.2010 14:04