xalia Δημοσ. 3 Δεκεμβρίου 2007 Δημοσ. 3 Δεκεμβρίου 2007 έχω ένα string που το έχει δώσει ο χρήστης. Δημιουργώ άλλο ένα με το ίδιο μήκος αλλά κενό, με παύλες ή τελείες. Αυτό που θέλω είναι να ελέγχω το ένα string για ένα γράμμα, που το δίνει ο χρήστης με scanf και αν το βρίσκει να το εμφανίζει στο άλλο string. Σκέφτηκα να το κάνω με strchr αλλά έχω κολλήσει και δε ξέρω πώς να το προχωρήσω.
xalia Δημοσ. 3 Δεκεμβρίου 2007 Μέλος Δημοσ. 3 Δεκεμβρίου 2007 τι εννοείς? array of characters είναι το string
Directx Δημοσ. 3 Δεκεμβρίου 2007 Δημοσ. 3 Δεκεμβρίου 2007 Αυτό μου θυμίζει λίγο Κρεμάλα, έτσι λοιπόν μιας και είχα λίγο χρόνο, είπα να γράψω μια Κρεμάλα σε ANSI-C η οποία θα βασίζεται στην memchr για τον εντοπισμό των προς ανεύρεση chars. Τα σχόλια στο source πιστεύω πως θα βοηθήσουν αρκετά για το πώς & γιατί, bugs φυσικά μπορεί να υπάρχουν καθώς το έγραψα γρήγορα εν μέσο άλλου project. Μια λεπτομέρεια, ο κώδικας είναι case-sensitive, δηλαδή ξεχωρίζει μεταξύ πεζών & κεφαλαίων γραμμάτων οπότε προσοχή (για case-insensitivity δείτε τις toupper/tolower). Ελπίζω να φανεί χρήσιμο. Καλή συνέχεια. > /*-Simple Lame Hangman in C-by Directx-R3-----------------------------------*/ #include <stdio.h> #include <string.h> #ifdef __BORLANDC__ #pragma hdrstop #endif /*---------------------------------------------------------------------------*/ #ifdef __BORLANDC__ #pragma argsused #endif int main(int argc, char* argv[]) { char szGuessMe[bUFSIZ] = "", szEmpty [bUFSIZ] = ""; int nKey = 0; /* * Let's read from the STDIN up to sizeof(szGuessMe) bytes into szGuessMe * variable. */ printf(" Enter String to be guessed by User (Enter to quit):"); fgets(szGuessMe,sizeof(szGuessMe),stdin); /* fgets applies \n to the end of szGuessMe so we must remove it */ szGuessMe[strlen(szGuessMe)-1] = '\0'; /* Quit? */ if(strlen(szGuessMe)) { /* Setup a szEmpty string full of dots (.) */ memset(&szEmpty,'.',strlen(szGuessMe)); printf(" To abort, press: .+Enter else to input: Character+Enter\n\n"); /* Game - Loop */ do{ /* Match Key in szGuessMe with memchr ... */ char *ptrCharPos = NULL; static int nCharsFound = 0; /* Did we solve the game? */ if(strlen(szGuessMe)==(size_t)nCharsFound) { printf(" Congratulation, you guessed the word!"); break; } /* * Just to get rid of the Enter key-stroke that getchar always * store into keyboard buffer. */ if(nKey=='\n') continue; /* * Did memchr found a matching char? If so, calculate it's position * until all matching chars are found. */ for(; { int nCharPos; /* * If Char found, then place it on szEmpty and erase it from szGuessMe * because memchr returns always the first char it finds. * * Then increase the nGuessed variable.. */ if((ptrCharPos=memchr(&szGuessMe,nKey,strlen(szGuessMe)))!=NULL) { nCharPos = ptrCharPos - szGuessMe; nCharsFound++; szEmpty[nCharPos] = szGuessMe[nCharPos]; szGuessMe[nCharPos] = 1; /* SOH */ } else break; } /* Print what the user guessed until now */ printf("%s\n",szEmpty); }while((nKey=getchar())!='.'); /* Just to get rid of the Enter key-stroke */ if(nKey=='.') getchar(); } /* End of program ... */ printf("\nPlease press Enter to exit.."); getchar(); return 0; } /*---------------------------------------------------------------------------*/ Υ.Γ. Ο κώδικας έχει γραφθεί σε CodeGear/Borland C/C++ Builder 6.0 (με το C compliance σε ANSI) και έχει δοκιμασθεί σε περιβάλλον κονσόλας MS-Windows XP (SP2).
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.