Fjaslokt Skrevet 18. februar 2003 Del Skrevet 18. februar 2003 noen som gidder å se over denne koden og muligens finne ut hvordan jeg skal få bort alle warningene, beklager hvis dette er litt mye å poste her men trenger hjelp. får ikke Eliza til å svare. /* Including Files */ # include<iostream.h> # include<conio.h> # include<string.h> # include<time.h> # include<math.h> # include<stdlib.h> # include<dos.h> # include<stdio.h> # include<fstream.h> /* Defining Costants*/ // Max. length in characters of any automated reply ( Keyword only) # define MAX_RESP_LEN 65 // Max. number of responses for any keyword # define MAX_RESP_NO 20 // Max. number of keywords # define MAX_KEY 14 // Max. number of Transpositions # define TRANSPOSE 12 // Max. Size Of User Input # define MAX_USER_INPUT 100 // Max. Length of Keyword # define MAX_KWD_LEN 20 // Delay involved in typing (in ms) # define DELAY 20 /* Defining Global Variables */ // for getting the user name char user[30]; // for word transpositions char wordin[TRANSPOSE][MAX_RESP_LEN]; char wordout[TRANSPOSE][MAX_RESP_LEN]; int RanNum(int max); void initialize_global(); class progstr { public: char userip[MAX_USER_INPUT]; char keyword[30]; int keyfound; int keyno; int nullip; // constructor progstr() { keyno=-1; nullip=0; } }ip; class resp { int tot_resp; int last_resp; char replys[MAX_RESP_NO][MAX_RESP_LEN]; char word[MAX_KWD_LEN]; public: // constructor resp() { tot_resp=0; last_resp=-1; } int getcount() { return last_resp; } void addword(char str[MAX_KWD_LEN]) { strcpy(word,str); } char * getword() { return word; } void addresp(char str[MAX_RESP_LEN]) { strcpy(replys[++last_resp],str); } void display_resp(int num); void quit_display_resp(int num); }; void display_logo() { cout<<" K K AAAAAAAAA L L EEEEEEE "<<endl; delay(DELAY); cout<<" K K A A L L E "<<endl; delay(DELAY); cout<<" K K A A L L E "<<endl; delay(DELAY); cout<<" K K A A L L EEEEEE "<<endl; delay(DELAY); cout<<" K K AAAAAAAAA L L E "<<endl; delay(DELAY); cout<<" K K A A L L E "<<endl; delay(DELAY); cout<<" K K A A LLLLLLLL LLLLLLLL EEEEEEEE "<<endl; } void display_line() { int width=80; int i=0; int x=wherex(); int y=wherey()+1; x=40; for(int k=0;k<40;k++) { delay(DELAY); gotoxy(x+k,y); cout<<(char)240; gotoxy(x-k,y); delay(DELAY); cout<<(char)240; } cout<<"n"; { void resp :: display_resp(int num) cout<<"KALLE > "; for(int i=0;i<strlen(replys[num]);i++) { // for deliberate typing errors if(RanNum(6)==0) { char c=RanNum(100); if(c=='n' || c=='b' || c==13) cout<<"w"; else cout<<c; delay(RanNum(DELAY)); cout<<"b"; } if(replys[num]=='*') { char * s1=ip.userip+strlen(ip.keyword); short int flag=0; for(int m=0;m<TRANSPOSE;m++) { char * s2=wordin[m]; char *ptr=NULL; ptr=strstr(s1,s2); if(ptr!=NULL) { // transposition word found in the // user input flag=1; // printing text before wordin[m] int times=ptr-s1; for(int i=0;i<times;i++) { delay(DELAY); cout<<ip.userip[strlen(ip.keyword)+i]; } // printing the wordout cout<<wordout[m]; // printing the left overs char c; c=*(ptr+strlen(wordin[m])); int t=0; while(c!='0') { cout<<*(ptr+strlen(wordin[m])+t); t++; c=*(ptr+strlen(wordin[m])+t); } } } // end of for // if flag is still zero , this means no transpose. if(0==flag) { char c; c=*(s1+strlen(ip.keyword)); int t=0; while(c!='0') { cout<<*(s1+t); t++; c=*(s1+t); } } // end of if break; } else { cout<<replys[num]; delay(RanNum(DELAY)); } } // end of for cout<<"n"<<user<<" > "; void resp :: quit_display_resp(int num) { cout<<"KALLE > "; for(int i=0;i<strlen(replys[num]);i++) { // for deliberate typing errors if(RanNum(6)==0) { char c=RanNum(100); if(c=='n' || c=='b' || c==13) cout<<"w"; else cout<<c; delay(RanNum(DELAY)); cout<<"b"; } cout<<replys[num]; delay(RanNum(DELAY)); } // end of for } resp keys[MAX_KEY]; int RanNum(int max) { randomize(); return rand() % max; } void find_keyword() { int len=0; int lenkey=0; int key_no=0; char teststr[50]; while((ip.keyfound==0) &&(key_no!=MAX_KEY)) { // getting the length of the keyword lenkey=strlen(keys[key_no].getword()); char *ptr=NULL; ptr=strstr(ip.userip,keys[key_no].getword()); if (ptr!=NULL) { // keyword found ! ip.keyfound=1; ip.keyno=key_no; strcpy(ip.keyword,keys[key_no].getword()); break; } /*////////////////////////////////////////// for(int i=0;i<lenkey;i++) { teststr=ip.userip; } teststr='0'; if (strcmp(teststr,keys[key_no].getword())==0) { ip.keyfound=1; ip.keyno=key_no; strcpy(ip.keyword,keys[key_no].getword()); } //////////////////////////////////////////*/ key_no++; } void read_from_file() { ifstream fin; int index=-1; fin.open("eliza.dat"); char line[MAX_RESP_LEN]; while(fin) { fin.getline(line,MAX_RESP_LEN); char *ptr=NULL; ptr=strstr("@KWD@",line); if(strlen(line)<1) { break; } else if(ptr!=NULL) { // the next line is a keyword fin.getline(line,MAX_RESP_LEN); keys[++index].addword(line); } else { // it is a response keys[index].addresp(line); } } // end of while } // end of function void main() { clrscr(); display_line(); display_logo(); display_line(); // for initializing the global variables initialize_global(); // for no response by the user. resp null_resp; null_resp.addresp("HUH ?"); null_resp.addresp("HVA ?"); null_resp.addresp("UNSKYLD ?"); null_resp.addresp("HVORDAN ER DET MENINGEN AT JEG SKAL SNAKKE HVIS DU IKKE SIER NOE ?"); // upon logging in resp signon; signon.addresp("HEI, JEG ER KALLE. HVA VIL DU SNAKKE OM ?"); signon.addresp("S HVORDAN HAR DU DET I DAG ?"); signon.addresp("JA JEG VET, KARL SIVERT SKATLAND ER EKSTREMT KUL, S HVA VIL DU SNAKKE OM? "); // when no key found resp no_key; no_key.addresp("BARE FORTSETT..."); no_key.addresp("HVA BETYR DET FOR DEG ?"); no_key.addresp("JEG SHNNER"); no_key.addresp("HVA SNAKKER DU EGENTLIG OM N? "); no_key.addresp("HVA SKAL DET BETY !?"); no_key.addresp("KAN DU FORKLARE DET LITT BEDRE ?"); no_key.addresp("INTERRESANT..."); no_key.addresp("S ????"); resp bye; bye.addresp("HADET BRA! HA EN FIN DAG..."); bye.addresp("HADET, HA DET FINT..."); bye.addresp("SNAKKES..."); bye.addresp("JAJA, SNAKKES SENERE DA?"); // reading data from dictionary read_from_file(); // STARTING CONVERSATION WITH THE USER // welcoming the user cout<<"KALLE > (BRUK CAPS-LOCK) HVA ER NAVNET DITT KJ’RE ?n"; cin>>user; signon.display_resp(RanNum(signon.getcount())); fflush(stdin); gets(ip.userip); strcpy(ip.userip,strupr(ip.userip)); while(strcmp(ip.userip,"BYE")!=0) { find_keyword(); if(strlen(ip.userip)<1) { null_resp.display_resp(RanNum(null_resp.getcount())); } else if(ip.keyfound==1) { keys[ip.keyno].display_resp(RanNum(keys[ip.keyno].getcount())); } else { no_key.display_resp(RanNum(no_key.getcount())); } // again returning to normal values of the data items strcpy(ip.userip," "); ip.keyno=-1; ip.keyfound=0; fflush(stdin); gets(ip.userip); strcpy(ip.userip,strupr(ip.userip)); } // end of while bye.quit_display_resp(RanNum(null_resp.getcount())); cout<<endl; display_line(); cout<<"tttVIKTIGnnPlease note that the current functionality and features of this program are very limited and they are just for accompanying the article that I posted on Planet Source Code. If you want to make this program more intelligent, make entries in Eliza.Dat file. n You can also increase the string manipulation power of the program, like considering multiple lines from the user, etc. I had written this code in 1 1/2 hr. just to make it more easier for the readers of my article about what is happening.nn HOW SMART YOU MAKE YOUR ELIZA DEPENDS ON HOW FAR YOU EXTEND THIS PROGRAM. THERE IS PRACTICALLY NO LIMIT ! nnn THIS CODE IS THE MINIMAL WORKING SKELETON !!nn"; display_line(); getch(); } void initialize_global() { strcpy(wordin[0],"ARE"); strcpy(wordout[0],"AM"); strcpy(wordin[1],"AM"); strcpy(wordout[1],"ARE"); strcpy(wordin[2],"WERE"); strcpy(wordout[2],"WAS"); strcpy(wordin[3],"WAS"); strcpy(wordout[3],"WERE"); strcpy(wordin[4],"YOU"); strcpy(wordout[4],"ME"); strcpy(wordin[5]," I "); strcpy(wordout[5],"YOU"); strcpy(wordin[6],"YOUR"); strcpy(wordout[6],"MY"); strcpy(wordin[7],"MY"); strcpy(wordout[7],"YOUR"); strcpy(wordin[8],"I'VE"); strcpy(wordout[8],"YOU'VE"); strcpy(wordin[9],"YOU'VE"); strcpy(wordout[9],"I'VE"); strcpy(wordin[10],"I'M"); strcpy(wordout[10],"YOU'RE"); strcpy(wordin[11],"YOU'RE"); strcpy(wordout[11],"I'M"); strcpy(wordin[12],"ME"); strcpy(wordout[12],"YOU"); strcpy(wordin[13],"YOU"); strcpy(wordout[13],"ME"); } Lenke til kommentar
tmx Skrevet 19. februar 2003 Del Skrevet 19. februar 2003 Du har ikke vurdert å f.eks referere til koden ved hjelp av en URL eller lignende? Hadde også vært praktisk å vite hva du mener er galt. I tillegg hadde det vært kjekt om du kunne skrevet litt leselig kode :-) Lenke til kommentar
Fjaslokt Skrevet 19. februar 2003 Forfatter Del Skrevet 19. februar 2003 har desverre ingen URL.. Hvis du kan definere "leselig kode" så hadde det vært fint. Får ikke boten til å svare.. shønner ikke hvorfor.. Lenke til kommentar
_Johan_ Skrevet 13. april 2003 Del Skrevet 13. april 2003 http://rafb.net/paste/ ---< BOoKMARK Lenke til kommentar
DrErling Skrevet 13. april 2003 Del Skrevet 13. april 2003 En genial side til sitt bruk. Det forstår selv jeg! --> Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå