Как разбить строку в Си на части?

В C можно разбить строку на части с помощью различных методов и функций. Разделение строки обычно выполняется по определенным символам или подстрокам.

Один из самых простых способов разделить строку в C - это использовать функцию strtok. Данная функция разделяет строку на последовательные подстроки, используя определенный набор разделителей. Прототип функции strtok выглядит следующим образом:

char *strtok(char *str, const char *delim);

Аргумент str – это указатель на исходную строку, которую нужно разделить. В первом вызове функции следует передать указатель на эту строку. Последующие вызовы принимают значение NULL для str, чтобы продолжить разделение исходной строки. Аргумент delim – это строка-разделитель, которая содержит символы, используемые для разделения строки.

Пример использования функции strtok для разделения строки на части, разделенные пробелами:

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "разделить строку на части";
    char delim[] = " ";
  
    char *token = strtok(str, delim);

    while (token != NULL) {
        printf("%sn", token);
        token = strtok(NULL, delim);
    }
  
    return 0;
}

В данном примере переданный в str массив символов разбивается на части с использованием пробелов в качестве разделителей. Функция strtok возвращает указатель на каждую найденную подстроку и автоматически сохраняет состояние между вызовами. Цикл while обрабатывает каждый найденный токен, выводит его и продолжает до тех пор, пока не будет достигнут конец строки.

Также можно использовать другие функции, такие как strsep и strstr, для разделения строки на подстроки. Функция strsep разбивает строку на подстроки с помощью определенного символа-разделителя. Функция strstr находит первое вхождение подстроки и разделяет строку на основе его.

В итоге, в языке C есть несколько способов разделения строки на части: использование функции strtok, strsep или strstr. Каждая из этих функций имеет свои преимущества и недостатки, поэтому выбор зависит от конкретной задачи и потребностей разработчика.