All pastes #550596 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-06-08 13:51 UTC
rendered paste body
#include <string.h>
#include <map>
#include <list>
#include <conio.h>

using namespace std;

#define MAX_STRING_ELMENT_VALUE 255

void main()
{
	//ilegal operator/bracket combinations
//	std::map<char,char> disallowedcomb;
	char disallowedcomb[MAX_STRING_ELMENT_VALUE][MAX_STRING_ELMENT_VALUE]; //better use a map to save space
	memset(disallowedcomb,0,sizeof(char)*MAX_STRING_ELMENT_VALUE*MAX_STRING_ELMENT_VALUE);
	disallowedcomb['+'][')']=1;
//	disallowedcomb['(']['+']=1;
	disallowedcomb['+']['}']=1;
//	disallowedcomb['{']['+']=1;
	disallowedcomb['+'][']']=1;
//	disallowedcomb['[']['+']=1;

	disallowedcomb['-'][')']=1;
//	disallowedcomb['(']['-']=1;
	disallowedcomb['-']['}']=1;
//	disallowedcomb['{']['-']=1;
	disallowedcomb['-'][']']=1;
//	disallowedcomb['[']['-']=1;

	disallowedcomb['*'][')']=1;
//	disallowedcomb['(']['*']=1;
	disallowedcomb['*']['}']=1;
//	disallowedcomb['{']['*']=1;
	disallowedcomb['*'][']']=1;
//	disallowedcomb['[']['*']=1;

	disallowedcomb['/'][')']=1;
	disallowedcomb['(']['/']=1;
	disallowedcomb['/']['}']=1;
	disallowedcomb['{']['/']=1;
	disallowedcomb['/'][']']=1;
	disallowedcomb['[']['/']=1;

	char parant_type_open[MAX_STRING_ELMENT_VALUE];
	memset(parant_type_open,0,sizeof(char)*MAX_STRING_ELMENT_VALUE);
	char parant_type_close[MAX_STRING_ELMENT_VALUE];
	memset(parant_type_close,0,sizeof(char)*MAX_STRING_ELMENT_VALUE);
	parant_type_open['(']=1;
	parant_type_close[')']=1;
	parant_type_open['[']=1;
	parant_type_close[']']=1;
	parant_type_open['{']=1;
	parant_type_close['}']=1;
	char parant_matches[MAX_STRING_ELMENT_VALUE];
	memset(parant_matches,0,sizeof(char)*MAX_STRING_ELMENT_VALUE);
	parant_matches[')']='(';
//	parant_matches['(']=')';//may not seem corect but we do not care :P
//	parant_matches['{']='}';
	parant_matches['}']='{';
//	parant_matches['[']=']';
	parant_matches[']']='[';
	
	int cur_depth_type[100000]; //ok ez helyett 1 lista kell !
	int depth_ind=0;
	char Zstring[10000];

	strcpy(Zstring,"(1+2)+3+(4-");
	for(size_t i=0;i<strlen(Zstring);i++)
	{
		if(disallowedcomb[Zstring[i]][Zstring[i+1]])
			printf("No correct use of operator\n");
		if(parant_type_open[Zstring[i]])
			cur_depth_type[depth_ind++]=Zstring[i];
		if(parant_type_close[Zstring[i]])
		{
			//check if we have this opened so we can close it
			if(depth_ind>0)
			{
				if(cur_depth_type[depth_ind-1]!=parant_matches[Zstring[i]])
					printf("we are trying to close a paranthese that has not been opened yet\n");
				else depth_ind--;
			}
			else printf("trying to close a paranthese but none were opened yet\n");
		}
	}
	if(depth_ind)
		printf("not all parantheses weere closed\n");
	int temp=strlen(Zstring);
	if(temp>0)
	{
		temp--;
		if( Zstring[temp]=='+' ||
			Zstring[temp]=='*' ||
			Zstring[temp]=='/' ||
			Zstring[temp]=='-' )
			printf("String terminates in operator, not alowed\n");
	}
	printf("finished testing string\n");
	char c=getch();
}