2013-12-08 4 views
1

Может ли кто-нибудь дать мне пример того, как искать частичный поиск имени или сделать поиск не чувствительным к регистру. Я набрал эти функции для поиска по фамилии, но мне было интересно, как отчасти искать имя/нечувствительность к регистру. СпасибоЧастичное имя Поиск

int Search() 
    { 
     for(int i = 0 ; i < Size ; i++) 
      if (Target == List[i].LastName) 
       return i; 
     return -1; 
    } 
    void LookUp_Student() 
    { 
     string Target; 
     int Index; 
     cout << "\nEnter a name to search for (Last Name): "; 
     getline(cin,Target); 
     Index = Search(List,Size,Target); 
     if (Index == -1) 
      cout << Target <<" is not on the list.\n" ; 
     else 
      Print_Search(List[Index]); 
    } 
+0

Вы может найти этот вопрос и ответить полезным http://stackoverflow.com/questions/313970/stl-string-to-lower -case как минимум для нечувствительного к регистру аспекта – mathematician1975

+0

Используйте toupper (или tolower), чтобы сделать регистр нечувствительным к регистру. Затем используйте find для поиска строк для подстрок. –

ответ

0

Вы можете использовать пользовательскую функцию, чтобы сделать сравнение строк случае нечувствительности:

#include <algorithm> 
//... 
bool compare_str(const string& lhs, const string& rhs) 
{ 
    return lhs.size() == rhs.size() && 
      std::equal(lhs.begin(), lhs.end(), rhs.begin(), 
       // Lambda function 
       [](const char& x, const char& y) { 
       // Use tolower or toupper 
        return toupper(x) == toupper(y); 
        } 
       ); 
} 

И затем использовать его как:

if (compare_str(Target,List[i].LastName)) 
{ 
// a match 
} 

Ref: std::equal

Смежные вопросы