После использования функции 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