По заданному тексту сформировать список слов, состоящих только из букв русского либо латинского алфавита - C (СИ)
Формулировка задачи:
задание:
По заданному тексту сформировать список слов, состоящих только из букв русского либо латинского алфавита. Для русских букв используется кодировка Кириллица-DOS. Упорядочить полученный список слов по алфавиту. Количество имен в списке заранее не известно.
проверьте код:
#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> int main(void) { char *a =(char *)malloc(512*sizeof(char)),*temp2,*ptr; char **str=(char **)malloc(512*sizeof(char)); int k=0,w,h; double *b =(double *)malloc(k*sizeof(double)),q,min,temp; fflush(stdin); fgets(a, 512, stdin); str[k]=(char *)malloc(512*sizeof(char)); ptr = str[k]; for(unsigned int i=0;i<strlen(a);i++) { if ((a[i]!=' ') && (i!=strlen(a)-1)) { *ptr++ = a[i]; } else { *ptr = '\0'; k++; str[k]=(char *)malloc(512*sizeof(char)); ptr = str[k]; } } for (int i = 0;i<k;i++) { q = 100; b[i] = 0; for (unsigned int j = 0;j<strlen(str[i]) ;j++) { h=str[i][j]; if (h>='a') h-=('a'-'A'); b[i] += (h * q); q /= 1000; } } for(int i = 0 ;i<k-1;i++) { min = 1e308; for(int j = i;j<k;j++) { if (b[j] < min) {min = b[j]; w = j; } } temp=b[i]; b[i]=b[w]; b[w]=temp; temp2=str[i]; str[i]=str[w]; str[w]=temp2; } for (int i=0;i<k;i++) printf("%s\n",str[i]); getch(); return 0; }
Решение задачи: «По заданному тексту сформировать список слов, состоящих только из букв русского либо латинского алфавита»
textual
Листинг программы
#include <stdio.h> #include <malloc.h> #include <ctype.h> #define BUFSIZE 32 char* s_copy(char* dst, const char* src); char* s_token(char* dst, char* str); typedef struct _node { char buf[BUFSIZE]; struct _node* next; } node; node* add(node* lst, const char* str); node* move(node* iter, node* lst); node* sort_abc(node* lst); void clear(node* lst); int main(void) { node* lst = NULL; node* iter = NULL; char* ptr; char buf[BUFSIZE]; char str[512] = "World, zex, apple, ZED:cool-ART, xor, nots, BIOS."; // gets(str); // разбиваем строку на слова добавляя в список for(ptr = s_token(buf, str); ptr; ptr = s_token(buf, ptr)) lst = add(lst, buf); // сортируем список по-алфавиту lst = sort_abc(lst); // выводим список в консоль while((iter = move(iter, lst)) != NULL) puts(iter->buf); // удаляем список clear(lst); lst = NULL; getchar(); return 0; } // добавление списка по FIFO(первым пришёл, первым вышел) или в хвост node* add(node* lst, const char* str) { node* ptr = (node*) malloc(sizeof(node)); s_copy(ptr->buf, str); if(! lst) { lst = ptr; lst->next = lst; } else { ptr->next = lst->next; lst = lst->next = ptr; } return lst; } // передвижение по списку от начало до конца(в право) node* move(node* iter, node* lst) { if(iter == NULL) return lst->next; if(iter == lst) return NULL; return iter->next; } // удаление всего списка с освобождением динамической памяти void clear(node* lst) { node* tmp; while(1) { if(lst == lst->next) { free(lst); return; } tmp = lst->next; lst->next = tmp->next; free(tmp); } } // сортировка списка методом пузырка(примитивный способ) node* sort_abc(node* lst) { int repeat; char buf[BUFSIZE]; node* ia, *ib; do { repeat = 0; for(ia = lst->next, ib = lst->next->next; ib != lst->next; ia = ia->next, ib = ib->next) { if(toupper(ia->buf[0]) > toupper(ib->buf[0])) { s_copy(buf, ia->buf); s_copy(ia->buf, ib->buf); s_copy(ib->buf, buf); repeat = 1; } } } while(repeat); return lst; } // аналог стандартной функции (strcpy) char* s_copy(char* dst, const char* src) { char* tmp = dst; while( *dst++ = *src++); return tmp; } //циклическая функция по разбивки строки на слова :alnum:=alpha+digit char* s_token(char* dst, char* ptr) { char* tmp = dst; while(! isalnum(*ptr) && *ptr) *ptr++; do { *dst++ = *ptr++; } while(isalnum(*ptr) && *ptr); *dst = '\0'; return (*tmp) ? ptr : NULL; }
Объяснение кода листинга программы
- Создание списка, состоящего только из букв русского либо латинского алфавита, представленных в виде слов, по заданному тексту.
- Разбивка строки на слова с использованием функции
s_token
. - Добавление каждого слова в список с использованием функции
add
. - Сортировка списка по-алфавиту с использованием функции
sort_abc
. - Вывод списка на консоль с использованием цикла
while
и функцииmove
. - Удаление списка с использованием функции
clear
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д