2017-10-20 1 views
-2

파일에서 문자열 (이 경우 이름)을 검색하는 프로그램을 작업 중입니다. 프로그램이 대소 문자를 구분하지 못하도록하고 싶었지만 strcmp가 있습니다. 나는 파일과 사용자 입력을 소문자로 변환하려고 생각하고 있었다. 그러나 그것은 비효율적 일 것입니다. 이것을 극복 할 수있는 다른 제안이 있습니까?
이것은 단지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++ (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;        

     } 
관련 문제