Hello Everyone,
I have done this code in C to read a HTML string from the keyboard, parse the tags and store them into a stack, then print it out.
Now I am trying to take of the Closing Tags from the stacks (aka.
/html) and store them into another array.However, I have a problem with that. Could you please help me in this, I have commented the code where it SHOULD copy the closing tags to another array.
Code:
#include <stdio.h>
#define B_OPEN '<'
#define B_CLOSE '>'
#define BRACKET_MAX 10
#define B_CHAR_MAX 7
char bracket[BRACKET_MAX][B_CHAR_MAX];
int diagnosis;
signed char bracket_nr, close_nr;
/******************** Prototypes ***********************/
/********************************************************/
/********************************************************/
int push (void);
int writetags (void);
/******************** Main ***********************/
/********************************************************/
/********************************************************/
int main (void){
extern int diagnosis;
extern signed char bracket_nr;
char c;
bracket_nr=-1;
diagnosis=0;
while((c=getchar())!=EOF && c!='\n'){
if(c==B_OPEN){
diagnosis=push();
};
switch (diagnosis){
case -3:
printf("infinate bracket.\n");
break;
case -5:
printf("Too Large Bracket.\n");
break;
case -7:
printf("Too many bracket.\n");
break;
};
if (diagnosis < 0)
break;
};
if(diagnosis==0){
printf("No brackets.\n");
}else if (diagnosis > 0){
printf("You have written %d brackets; they are:\n",diagnosis);
writetags();
}else{
printf("Text contains errors.\n");
};
system ("PAUSE");
return diagnosis;
};
/******************** Push Function**********************/
/********************************************************/
/********************************************************/
int push (void){
extern char bracket [BRACKET_MAX][B_CHAR_MAX];
extern int diagnosis;
extern signed char bracket_nr;
char c, bracket_char;
c=getchar();
bracket_nr++;
if(bracket_nr>=BRACKET_MAX)
return (diagnosis = -7); //to many tags
diagnosis=bracket_nr+1;
for(bracket_char=0;c!=EOF && c!='\n' && c!=B_CLOSE && bracket_char<B_CHAR_MAX;bracket_char++, c=getchar()){
//record tag name into the stack bracket
bracket[bracket_nr][bracket_char]=c;
};
bracket[bracket_nr][bracket_char]='\0';
if(c==B_CLOSE){
return diagnosis;
}else if (bracket_char>=B_CHAR_MAX){
return(diagnosis=-5);
}else if (c==EOF || c=='\n')
return (diagnosis=-3);
return diagnosis;
};
/******************** writetags function ***************/
/********************************************************/
/********************************************************/
int writetags (void) {
extern char bracket[BRACKET_MAX][B_CHAR_MAX];
char close[BRACKET_MAX][B_CHAR_MAX];
extern int diagnosis;
extern signed char bracket_nr, close_nr;
char bracket_char, close_char;
for(;bracket_nr>=0; bracket_nr--){
for(bracket_char=0; bracket[bracket_nr][bracket_char]!='\0'; bracket_char++){
putchar(bracket[bracket_nr][bracket_char]);
}
putchar('\n');
}
/*****************************************START: TO COPY and PRINT CLOSING TAGS*************************************/
close_nr=0;
for(;bracket_nr>=0; bracket_nr--, close_nr++){
if (bracket_char=='/'){
for(close_char=0, bracket_char=0; bracket[bracket_nr][bracket_char]!='\n'; bracket_char++, close_char++){
close[close_nr][close_char]=bracket[bracket_nr][bracket_char];}}}
close[close_nr][close_char]='\0';
printf("Off tags are:\n");
for(;close_nr>=0; close_nr--){
for(close_char=0; close[close_nr][close_char]!='\0'; close_char++){
putchar(close[close_nr][close_char]);
}
putchar('\n');
}
/*****************************************END: TO COPY and PRINT CLOSING TAGS*************************************/
};