После использования функции strtok, как обращаться к лексемам? - C (СИ)
Формулировка задачи:
После использования функции strtok, как мне обращаться к лексемам?
Допустим разбил я предложение мама мыла раму на 3 слова, теперь мне нужно сравнить первое и второе слово, одинаковые ли они? Как это реализовать?
Решение задачи: «После использования функции strtok, как обращаться к лексемам?»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <stdlib.h> #define DELIM " .,;:\n\t" #define N 1024 void Strtok(char *s, char **a, int *pn) { char *token; for(*pn = 0, token = strtok(s, DELIM); token != NULL; token = strtok(NULL, DELIM)) { a[*pn] = (char *)malloc((strlen(token) + 1) * sizeof(*token)); strcpy(a[(*pn)++], token); } } void Print(char **a, int n) { int i; for(i = 0; i < n; i++) puts(a[i]); } int main( ) { char s[N], *a[N]; int n; fgets(s, N, stdin); Strtok(s, a, &n); Print(a, n); return 0; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Определяется строка-разделитель и её длина
- Определяется количество элементов в массиве
- В функции
Strtok
инициализируется указатель на первый элемент в строкеs
- В цикле происходит разделение строки
s
на токены с помощью функцииstrtok
и сохранение их в массивеa
- В функции
Print
происходит вывод элементов массиваa
на экран - В функции
main
считывается строка с помощьюfgets
, вызывается функцияStrtok
для разделения строки на токены и сохранения их в массивеa
, затем вызывается функцияPrint
для вывода элементов массива на экран - Код не содержит обработку ошибок, в том числе проверку на достаточность памяти для выделения массива
a
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д