#include <iostream>
#include <cctype>
struct tnode {
char* ptr;
tnode* next;
};
void tnode_init(tnode* arr[], int num);
void tnode_token(tnode* arr[], int num, char* s);
void tnode_free(tnode* arr[], int num);
int main(void){
const int num = 26;
tnode* arr[num];
tnode_init(arr, num);
char s[] = "wood toy ball doll apple";
tnode_token(arr, num, s);
for(int i = 0; i < num; ++i){
for(const tnode* p = arr[i]; p != NULL; p = p->next)
std::cout << p->ptr << std::endl;
}
tnode_free(arr, num);
return 0;
}
void tnode_init(tnode* arr[], int num){
for(int i = 0; i < num; ++i)
arr[i] = NULL;
}
//заполнение таблицы
void tnode_token(tnode* arr[], int num, char* s){
int i;
char* p;
while(*s){
while(*s && !isalpha(*s))
++s;
for(p = s; isalpha(*p); ++p);
if((p - s) > 0){
if(*p)
*p++ = '\0';
if(islower(*s) && ((i = *s - 'a') < num)){
tnode* ptr = new (std::nothrow) tnode();
if(ptr == NULL)
break;
ptr->ptr = s;
ptr->next = arr[i];
arr[i] = ptr;
*s = toupper(*s);
}
}
s = p;
}
}
//удаление
void tnode_free(tnode* arr[], int num){
tnode* t;
for(int i = 0; i < num; ++i){
while(arr[i] != NULL){
t = arr[i];
arr[i] = arr[i]->next;
delete t;
}
}
}