Слово до точки занести в два стека, содержащих гласные и согласные буквы - C (СИ)
Формулировка задачи:
struct Node
{
char c;
list *next;
}n1,n2;
struct ptr_stack
{
Node *last;
};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;
}Решение задачи: «Слово до точки занести в два стека, содержащих гласные и согласные буквы»
#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 для очистки памяти от выделенных стеков.