Будет полезно, если вы разместите код, который не работает, и расскажите нам, как он не работает.(Ошибка времени компиляции? Ошибка времени выполнения?) Но я предлагаю использовать std :: string, по крайней мере, в стеке:
using namespace std;
stack<string> TagStack;
Вы должны иметь возможность помещать в стек без явного приведения:
TagStack.push(BeginTag);
Примечание: я не одобряю использование вами строк C для этой цели;Я бы также использовал std :: string в токенизаторе.Но это ваш звонок.Если вы продолжите использовать массивы char, вы можете изменить char [MAX] на char [MAX + 1], поскольку обычно MAX используется для обозначения максимального числа ненулевых символов в строке.Следовательно, вам нужно убедиться, что для завершающего нуля выделен один дополнительный символ.Это может быть просто проблема стиля, но это также может помочь предотвратить ошибки.