2010-11-05 13 views
1

Je suis sûr que pour la plupart c'est une question très facile. Mais je suis en train d'écrire un programme de reconnaissance de jetons pour XML en C++ et j'utilise une pile pour m'assurer qu'il y a des balises de début et de fin correspondantes. Eh bien mes balises sont c chaînes ...C++ - Pousser un C-String sur une pile Template

char BeginTag[MAX]; 

J'essaie de pousser cela sur ma pile de modèles. Mais je ne sais pas quel type de passer la pile. J'ai essayé ...

stack<char> TagStack; 

Mais cela ne fonctionne pas. J'ai aussi essayé quelques autres solutions, mais aucune ne semble fonctionner. Est-ce que quelqu'un peut m'aider?

Répondre

3

Les tableaux ne sont pas assignables, ils ne peuvent donc pas être utilisés comme type de valeur de conteneur.

Vous pouvez définir une struct contenant un tableau, cependant, et l'utiliser:

struct Tag { 
    char name[MAX]; 
}; 

stack<Tag> TagStack; 

Ou tout simplement utiliser un std::string pour vos mots clés.

1

Il serait utile si vous avez posté le code qui ne fonctionne pas, et dites-nous comment cela ne fonctionne pas. (Erreur de compilation Erreur d'exécution?) Mais ma suggestion serait d'utiliser std :: string, au moins sur la pile:

using namespace std; 
stack<string> TagStack; 

Vous devriez être en mesure de pousser sur la pile sans un casting explict:

TagStack.push(BeginTag); 

Remarque: Je n'approuve pas votre utilisation des chaînes C à cette fin; J'utiliserais std :: string dans le tokenizer aussi. Mais c'est ton appel. Si vous continuez à utiliser des tableaux char, vous voudrez peut-être changer char [MAX] en char [MAX + 1], car MAX serait normalement utilisé pour indiquer le nombre maximum de caractères non nuls dans la chaîne. Par conséquent, vous devez vous assurer qu'il y a un char supplémentaire alloué pour le nul final. Cela peut être simplement un problème de style, mais cela peut également aider à prévenir les bogues.

+0

Le code qui ne fonctionne pas est 'TagStack.push (BeginTag)', étant donné les déclarations dans la question de l'OP. Personne imcompatible. – Cascabel

+0

Je me suis dit en tant que tel, mais il vaut mieux que les affiches soient aussi claires que possible sur les problèmes qu'elles voient. –

+0

J'ai compris comment. J'ai besoin que le type de la plaque soit un pointeur char. Quel est le premier caractère de la chaîne – Johnrad

Questions connexes