I am trying to get this program to work, when it runs, any command, aside from exit causes the function mylowercase
to run. I have no clue, as I have been looking at this for a few days and I cannot find where the problem is. Any help on this one would be huge.
Code://String Processor with Array of Structures and Commands.cpp : Defines the entry point for the console application. #include "stdafx.h" #include <cstring> struct String_Handler{ char *name; char *message; char *(*mystringfunction)(char *,const char *); }; char *mystrcopy(char *dst, const char *src){ char *rez=dst; for(;(*dst=*src)!='\0';src++,dst++); return rez; } char *myuppercase(char *dst,const char *src){ char *rez=dst; for(;*src!='\0';*dst=(*src>='a'&&*src<='z')?*src+('A'-'a'):*src,src++,dst++); *dst='\0'; return rez; } char *mylowercase(char *dst, const char *src){ char *rez=dst; for(;*src!='\0';*dst=(*src>='A'&&*src<='Z')?*src+('a'-'A'):*src,src++,dst++); *dst='\0'; return rez; } char *myrighttrim(char *dst, const char *src){ char *rez=dst; for(;*src!='\0'&& *src==' ';src++); for(;(*dst=*src)!='\0';src++,dst++); return rez; } char *myreverse(char *dst, const char *src){ char current_char; char *rez=dst; if(*src!='\0'){ current_char=*src; dst=myreverse(dst,src+1); *dst++=current_char; *dst='\0'; } return dst; } int binary_search_iterative(const String_Handler sh_table[],int first_index,int last_index,char *comm){ int middle; while(first_index<=last_index){ middle=(last_index+first_index)/2; if(strcmp(comm,sh_table[middle].name)==0) return middle; //successfully found element! if(strcmp(comm,sh_table[middle].name)==-1) last_index=middle-1; else first_index=middle+1; } return -1; //element not found! } bool string_processor(char *comm,char *dst, char *src, String_Handler sh_table[],int table_size){ //for(int i=0;i<table_size&&strcmp(comm,sh_table[i].name)!=0;i++); int i; if(i=binary_search_iterative(sh_table,0,table_size-1,comm)!=-1){ std::cout<<sh_table[i].message<<(sh_table[i].mystringfunction)(dst, src)<<std::endl; return true; } else return false; } void get_command(char *command){ std::cout<<"Input command(copy,upper,lower,right,reverse or exit):"; std::cin>>command; std::cout<<std::endl; return; } int main() { String_Handler string_handler_table[5]; string_handler_table[0].name="copy"; string_handler_table[0].message="The copy of the string is: "; string_handler_table[0].mystringfunction=mystrcopy; string_handler_table[4].name="upper"; string_handler_table[4].message="The upper case version of the string is: "; string_handler_table[4].mystringfunction=myuppercase; string_handler_table[1].name="lower"; string_handler_table[1].message="The lower case version of the string is: "; string_handler_table[1].mystringfunction=mylowercase; string_handler_table[3].name="right"; string_handler_table[3].message="The right trimmed version of the string is:"; string_handler_table[3].mystringfunction=myrighttrim; string_handler_table[2].name="reverse"; string_handler_table[2].message="The reversed version of the string is:"; string_handler_table[2].mystringfunction=myreverse; char *str=" This is the test string!"; char rez[100]; char command[10]=""; get_command(command); while(strcmp(command,"exit")!=0){ if(!string_processor(command,rez,str,string_handler_table,sizeof string_handler_table/sizeof (String_Handler))) std::cout<<"Not a legal command!"<<std::endl; get_command(command); } return 0; }



LinkBack URL
About LinkBacks


