2014-12-13 7 views
-3

У меня есть небольшая проблема. Я должен написать функцию, и я не знаю, как это сделать. Я пробовал все.C++ быстро найти в структуре

#include <iostream> 
#include <stdlib.h> 
#include <string> 
#include <list> 
#include <algorithm> 

using namespace std; 

struct sBase 
{ 
    string NAME; 
    string AGE; 

}; 

list <sBase> FIND_NAME(list <sBase> &MYLIST_ONE, const string Name, bool PART) 
{ 
    list <sBase> NEW; 
    list <sBase>::iterator SOLUTION = find(MYLIST_ONE.begin(), MYLIST_ONE.end(), Name); // FULL OF ERRORS . I NEED HELP HERE 
    NEW.push_back(*SOLUION); 

    return NEW; 
} 

int main() 
{ 
    list <sBase> MYLIST_ONE;//List including people. I used another function that add people to this. 

    string Name 
    cout << "Type a name : "; 
    getline(cin, Name); 

    string ASK; 
    bool PART; 
    string yes = "YES", no = "NO"; 

    cout << "Is name only a part of a text ?(YES OR NO) :"; 
    getline(cin, ASK); 

    if (ASK = yes) 
     PART = true; 
    if (ASK = no) 
     PART = false; 

    list <sBase> MYLIST_ONE = FIND_NAME(list <sBase> &MYLIST, const string Name, bool PART) //FUCTON SHOULD RETURN A NEW LIST INCLUDING ONLY STRUCTURE OF THIS ONE PEARSON 


    system("pause"); 
    return 0; 
} 

ЕСЛИ ЧАСТЬ ПРАВДА ЭТО ОЗНАЧАЕТ, ЧТО ЭТО ПРОСТО ФРАГМЕНТ ТЕКСТА .FOR ПРИМЕРА I PUT Джон, ЧАСТЬ ИСТИНА ТАК РЕЗУЛЬТАТ МОЖЕТ БЫТЬ Johnaka Alaka, или Джон цветок.

IF PART IS FALSE IT HAS TO BE FULL NAME : john new,PART false ... result - john new and other iformations. 

Я был бы признателен, если вы поможете мне.

ответ

0

рефакторинга немного, удаление (в большинстве случаев) капитализированные имена переменных оставляет это:

struct sBase 
{ 
    string name; 
    string age; 

}; 

struct has_name_like 
{ 
    has_name_like(const std::string& name) 
    : _name(name) 
    {} 

    bool operator()(const sBase& sbase) const 
    { 
     return (sbase.name == _name); 
    } 

private: 
    std::string _name; 
}; 

list <sBase> find_name(const list <sBase>& input_list, const string Name, bool PART) 
{ 
    list <sBase> result; 
    list <sBase>::const_iterator iter = find_if(input_list.begin(), 
               input_list.end(), 
               has_name_like(Name)); 
    if(iter != input_list.end()) { 
     result.push_back(*iter); 
    } 
    return result; 
} 

int main() 
{ 
    list <sBase> mylist_one;//List including people. I used another function that add people to this. 

    string Name; 
    cout << "Type a name : "; 
    getline(cin, Name); 

    string ASK; 
    bool PART = false; 
    static const string yes = "YES", no = "NO"; 

    cout << "Is name only a part of a text ?(YES OR NO) :"; 
    getline(cin, ASK); 

    if (ASK == yes) 
     PART = true; 
    if (ASK == no) 
     PART = false; 

    list <sBase> mylist_two = find_name(mylist_one, Name, PART); 


    system("pause"); 
    return 0; 
} 

, который будет по крайней мере, компилировать. Возможно, вам захочется переосмыслить логику того, что вы пытаетесь достичь. действительно ли вы хотите извлечь список, содержащий 0 или 1 экземпляр sBase, или просто хотите найти его, если он существует (в этом случае просто используйте результат find_if, как показано).

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