Слово до точки занести в два стека, содержащих гласные и согласные буквы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Мне дали следующее задание и хотелось бы чтобы вы мне помогли с ним: "Последовательность символов, ограниченную точкой, занести в два стека. содержащих гласные и согласные буквы. Вывести текст и элементы из обоих стеков." Как я понимаю стек нужно создать следующим образом:
Листинг программы
  1. struct Node
  2. {
  3. char c;
  4. list *next;
  5. }n1,n2;
  6. struct ptr_stack
  7. {
  8. Node *last;
  9. };
А функции push и pop будут выглядеть так:
Листинг программы
  1. void pop ( ptr_stack *stack )
  2. {
  3. if ( stack->last != 0 )
  4. {
  5. Node *tmp = Node->last->prev;
  6. delete Node->last;
  7. Node->last = tmp;
  8. }
  9. }
  10. void push ( ptr_stack *stack, num )
  11. {
  12. Node *tmp = new list;
  13. tmp->num = num;
  14. tmp->prev = Node->last;
  15. Node->last = tmp;
  16. }
Хотелось бы узнать в правильном ли направлении я иду и хотелось бы услышать ваши советы по поводу дальнейших действий. Заранее спасибо
Забыла упомянуть, нужно использовать динамические списки и структуру для каждого звена.

Решение задачи: «Слово до точки занести в два стека, содержащих гласные и согласные буквы»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <ctype.h>
  3.  
  4. #include "stack.h"
  5.  
  6. int isvowel(int c)
  7. {
  8.   int character = tolower(c);
  9.  
  10.   if ((character == 'a') || (character == 'e') || (character == 'i') ||
  11.       (character == 'o') || (character == 'u'))
  12.     return 1;
  13.   else
  14.     return 0;
  15. }
  16.  
  17. int main(void)
  18. {
  19.   char s[256];
  20.  
  21.   int i;
  22.  
  23.   char c;
  24.  
  25.   STACK_HANDLE hVowelsStack;
  26.   STACK_HANDLE hConsonantStack;
  27.  
  28.   StackCreate(&hVowelsStack, sizeof(char));
  29.   StackCreate(&hConsonantStack, sizeof(char));
  30.  
  31.   gets(s);
  32.  
  33.   i = 0;
  34.   while (s[i] != '.')
  35.   {
  36.     if (isalpha(s[i]))
  37.     {
  38.       if (isvowel(s[i])) StackPush(hVowelsStack, &s[i]);
  39.       else StackPush(hConsonantStack, &s[i]);
  40.     }
  41.     i++;
  42.   }
  43.  
  44.   printf("String : '%s'\n", s);
  45.  
  46.   printf("Vowels in stack:\n");
  47.   while (!IsStackEmpty(hVowelsStack))
  48.   {
  49.     StackPop(hVowelsStack, &c);
  50.  
  51.     printf("item : '%c'\n", c);
  52.   }
  53.  
  54.   printf("Consonants in stack:\n");
  55.   while (!IsStackEmpty(hConsonantStack))
  56.   {
  57.     StackPop(hConsonantStack, &c);
  58.  
  59.     printf("item : '%c'\n", c);
  60.   }
  61.  
  62.   StackDelete(&hVowelsStack);
  63.   StackDelete(&hConsonantStack);
  64.  
  65.   return 0;
  66. }

Объяснение кода листинга программы

В этом коде используется стандартная библиотека языка C, а также пользовательская библиотека для работы со стеками. Сначала определена функция isvowel, которая принимает символ и возвращает 1, если символ является гласной (a, e, i, o, u), и 0 в противном случае. В функции main создаются два указателя на стек, hVowelsStack и hConsonantStack, а также буфер для строки s. Затем в стек hVowelsStack и hConsonantStack добавляются гласные и согласные буквы из строки s до тех пор, пока не встретится точка. После этого выводится исходная строка, а затем из стеков поочередно вытаскиваются и выводятся элементы. В конце программы вызываются функции StackDelete для очистки памяти от выделенных стеков.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы