Реализовать функцию Strtok, разбивающую строку на подстроки - C (СИ)

Узнай цену своей работы

Формулировка задачи:

В библиотеке string.h имеется функция strtok, которая разделяет строку на несколько строк если между ними есть определенный символ. Например, если строку разделить символом '_', мама_мыла_раму,то получится 3 строки мама, мыла, раму. Нужно реализовать эту функцию самому, но я не знаю как подступиться. Помогите пожалуйста=)
Есть такая мысль, заменить символ-разделитель нулем-терминатором, но вот дальше тупик)

Решение задачи: «Реализовать функцию Strtok, разбивающую строку на подстроки»

textual
Листинг программы
char *f(char *p, char x)
{ static char *s=NULL; 
 if (p==NULL) {
   if (s==NULL) return NULL;
   p = s+1;
 }
  s = strchr(p, x);
  if (s!=NULL) *s = '\0';
  return p;
}
main()
{ char p[100], *q; 
  strcpy(p, " мама_мыла_раму");   
   q = f(p, '_');
   while(q!=NULL) {
      printf("%s\n", q);
      q = f(NULL, '_');
   }
}

Объяснение кода листинга программы

  1. char f(char p, char x)
    • Функция принимает два аргумента: указатель на строку p и символ x.
    • Если p равен NULL, то возвращается NULL.
    • Если p не равен NULL, то ищется следующая подстрока, начинающаяся с символа x.
      • Статическое значение s инициализируется как NULL.
      • Если s равен NULL, то возвращается NULL.
      • Значение s обновляется таким образом, чтобы указывать на первый символ следующей подстроки.
      • Если s не равен NULL, то обновляется значение s, чтобы указывать на символ, следующий за последним символом текущей подстроки.
      • Если s не равен NULL, то возвращается p.
    • Значение s обновляется при каждом вызове функции.
  2. main()
    • В функции main() объявляется массив p типа char с размером 100 символов.
    • Строка мама_мыла_раму копируется в массив p.
    • Переменная q инициализируется как NULL.
    • Пока q не равен NULL, выполняются следующие действия:
      • Выводится значение q.
      • q обновляется как результат вызова функции f(NULL, '_').
    • В конце программы не забудьте выйти из цикла при достижении условия завершения.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы