2017-10-20 3 views
-2

ファイル内の文字列(この場合は名前)を検索するプログラムを開発中です。私はプログラムが大文字と小文字を区別しないようにしたかったのですが、strcmpがあります。私はボットファイルとユーザー入力を小文字に変換することを考えていました。しかし、それは非効率的です。これを克服するための他の提案はありますか?
これはちょうどstrcmpi()を使用せずにstrcmp()を大文字と小文字を区別しないようにする

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++(2nd Edition)を使用しています ご意見はありますか? – Pouya

+3

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

答えて

2

が小文字にファイルやユーザー入力ボット変換することを考えていたプログラムのアイデアを得るためのコードの一部です。しかし、それは非効率的です。これを克服するための他の提案はありますか?

これを再考するには

これは、大文字と小文字の区別を扱う典型的な方法です。私は両方の文字列(ファイル名とユーザー入力)を小文字に変換することを意味します。

これは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;        

     } 
関連する問題