2017-10-20 111 views
-2

我正在使用在文件中搜索字符串(本例中爲名稱)的程序。我希望程序不要區分大小寫,但strcmp是。我正在考慮將bot文件和用戶輸入轉換爲小寫。但這樣做效率不高。任何其他的建議來克服這一點?
這是代碼的一小部分只得到程序在不使用strcmpi()的情況下使strcmp()不區分大小寫()(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

這是可怕的風格和'while(!name_file.eof())'甚至是一個錯誤。你應該在一本好書中閱讀現代C++。 –

+0

@BaummitAugen目前我正在使用Big C++(第二版) 你有什麼建議嗎? – Pouya

+3

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

回答

2

在心裏對BOT文件和用戶輸入轉換爲小寫的想法。但這樣做效率不高。任何其他的建議來克服這一點?

重新考慮這一點。

這是處理大小寫敏感的典型方法。我的意思是將兩個字符串(文件名和用戶輸入)轉換爲小寫。

這需要O(n),其中n = max(filename.size, userInput.size)

至於性能,文件名和用戶輸入通常是微小的數據,因此,我敢肯定,將它們轉換爲小寫,肯定會有是你的算法瓶頸

+0

但我不應該也小寫文本文件以及? – Pouya

+0

是@Pouya,但它不會影響你的代碼更復雜,請檢查我更新的答案。 – 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;        

     } 
相關問題