Работаю над помещением строки в мой стек, и в настоящее время я получаю случайные символы (символы не помещаются в стек, потому что, когда я потом проверяю, мой стек пуст)
вот соответствующие функции и структура
typedef char stackitem;
struct stack {
stackitem d;
struct stack *next;
};
typedef struct stack ELEMENT;
typedef ELEMENT *POINTER;
void push(POINTER *Top, stackitem a)
/* Put item a into the top of the stack */
{
POINTER temp;
temp = malloc(sizeof(ELEMENT));
temp->d = a;
temp->next = *Top;
*Top = temp;
printf("Insert element %c\n", temp->d);
}
void push_string(POINTER *Top,char *string)
/* Push a string of characters into a stack. */
{
char *tmp = malloc(strlen(string) + 1);
if (tmp)
strcpy(tmp, string);
push(&Top,tmp);
Части второй функции я нашел в другом потоке SO. И вот как я его использую:
main()
{
POINTER top;
top= (POINTER) NULL;
stackitem A='A';
stackitem B='B';
char *C="12345";
push_string(&top,C);
print_stack(top);
return 0;
}
Как я могу добавить строку в стек? функция push работает для помещения символов в стек, но я не могу заставить ее нажать целую строку.
"ABC"
, выполните цикл по строке и поместите'A'
,'B'
и'C'
. - person M Oehm   schedule 10.03.2021typedef ELEMENT *POINTER;
считается плохой практикой. ИспользуйтеELEMENT*
, чтобы читатель мог видеть, что это указатель. - person ikegami   schedule 10.03.2021-Wall -Wextra -pedantic
с gcc/clang) - person ikegami   schedule 10.03.2021CharStack
,IntStack
,StringStack
и так далее. C++ и многие другие языки позволяют вам использовать шаблоны, так что вы можете сказатьstack<char>
, а компилятор под капотом создаст для васCharStack
. - person M Oehm   schedule 10.03.2021