2017-10-20 69 views
-2

Je travaille sur un programme qui recherche une chaîne (dans ce cas un nom) dans un fichier. Je voulais que le programme ne soit pas sensible à la casse mais strcmp l'est. Je pensais convertir bot le fichier et l'entrée de l'utilisateur en minuscules. Mais ce serait inefficace. D'autres suggestions pour surmonter cela?
C'est une fraction de code pour obtenir juste une idée du programmeRendre la casse strcmp() insensible à la casse sans utiliser strcmpi() (C++)

cout << "\n Enter the Guests name: "; 
    cin.getline(look_4_person, 256); //name that is being looked up 
    cout << "\n Searching... \n"; 
    while(!name_file.eof()) 
    { 
     ++place; 
     name_file.getline(person,255); 
     if(strcmpi (person,look_4_person)==0) 
     { 
     found=place; 
     } 
    } 
    cout << "\n" << look_4_person << " is number " << found << 
      " on the list \n"; 
+3

Ceci est un style terrible et 'while (! Name_file.eof())' est même un bug. Vous devriez lire sur C++ moderne dans un bon livre. –

+0

@BaummitAugen Actuellement j'utilise Big C++ (2nd Edition) Avez-vous des suggestions? – Pouya

+3

https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list –

Répondre

2

a été pensée de convertir bot le fichier et l'entrée d'utilisateur en minuscules. Mais ce serait inefficace. D'autres suggestions pour surmonter cela?

Pour repenser cela.

Ceci est un moyen typique de traiter la sensibilité à la casse. Je veux dire convertir les deux chaînes (nom de fichier et entrée utilisateur) en minuscules.

Cela prend O(n), où n = max(filename.size, userInput.size).

En ce qui concerne la performance, le nom et l'entrée d'utilisateur sont généralement données minuscules, donc je suis sûr que les convertir en minuscules, sera certainement pas le goulot d'étranglement de votre algorithme.

+0

Mais ne devrais-je pas également minuscule le fichier texte aussi bien? – Pouya

+0

oui @Pouya, mais cela n'affectera pas la complexité de votre code plus, vérifiez ma mise à jour s'il vous plaît. – gsamaras

0
while(!name_file.eof()){ 
     ++place; 
     name_file.getline(person,256); 
     for(i=0; i<200; i++) 
     { 
     person[i] = tolower(person[i]); //changes to lower case to compare 
     } 
     if(strcmp (person,look_4_person)==0){ //compares 
     found=place;        

     }