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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
 
#include "stack.h"
 
int isvowel(int c)
{
  int character = tolower(c);
 
  if ((character == 'a') || (character == 'e') || (character == 'i') ||
      (character == 'o') || (character == 'u'))
    return 1;
  else
    return 0;
}
 
int main(void)
{
  char s[256];
 
  int i;
 
  char c;
 
  STACK_HANDLE hVowelsStack;
  STACK_HANDLE hConsonantStack;
 
  StackCreate(&hVowelsStack, sizeof(char));
  StackCreate(&hConsonantStack, sizeof(char));
 
  gets(s);
 
  i = 0;
  while (s[i] != '.')
  {
    if (isalpha(s[i]))
    {
      if (isvowel(s[i])) StackPush(hVowelsStack, &s[i]);
      else StackPush(hConsonantStack, &s[i]);
    }
    i++;
  }
 
  printf("String : '%s'\n", s);
 
  printf("Vowels in stack:\n");
  while (!IsStackEmpty(hVowelsStack))
  {
    StackPop(hVowelsStack, &c);
 
    printf("item : '%c'\n", c);
  }
 
  printf("Consonants in stack:\n");
  while (!IsStackEmpty(hConsonantStack))
  {
    StackPop(hConsonantStack, &c);
 
    printf("item : '%c'\n", c);
  }
 
  StackDelete(&hVowelsStack);
  StackDelete(&hConsonantStack);
 
  return 0;
}

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

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

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


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

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

12   голосов , оценка 4.25 из 5
Похожие ответы