Problem mit find_if



  • Hallo zusammen,

    ich habe ein Problem mit "find_if". Es geht darum von einer Datei Strings einzulesen die ein Komma als Trennzeichen haben da in einer Zeile mehrer Werte stehen. So sieht eine Zeile aus:

    A,00CA,GOLDSTONE GTS,35.350525,-116.888367,3038,18000,0,6000
    

    Dazu nun folgender Code, noch nciht vollstaendig weil ich erstmal das "find_if" Problem loesen moechte:

    bool komma(char c)
    {
    	return c == ',';
    }
    
    ifstream Data ("data.txt");
    
    string input_string;
    
    while(getline(Data, input_string))
    {
    	typedef string::const_iterator iter;
    	iter i = input_string.begin();
    
    	while(i != input_string.end())
    	{
    		iter j = find_if(i, input_string.end(), komma);
    	}
    }
    

    Der Complier (VC++ 9.0) gibt folgenden Fehler aus:

    1>c:\users\sven\documents\visual studio 2008\projects\sg_b777\sg_b777\sys.cpp(300) : error C2782: '_InIt std::find_if(_InIt,_InIt,_Pr)' : template parameter '_InIt' is ambiguous
    1>        c:\program files\microsoft visual studio 9.0\vc\include\algorithm(94) : see declaration of 'std::find_if'
    1>        could be 'std::_String_iterator<_Elem,_Traits,_Alloc>'
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>,
    1>            _Alloc=std::allocator<char>
    1>        ]
    1>        or       'iter'
    

    Kann mir jemand einen Hinweis geben wo der Fehler ist und/oder was ich anders machen muss? Dank schonmal im Vorraus.

    Edit: habe eine Antwort bekommen, der Fehler liegt wohl bei

    typedef string::const_iterator iter;
    

    wo wohl "string::iterator" stehen muss.



  • Jo oder:

    std::find_if< std::string::const_iterator, bool (*)( std::string::value_type ) >( ... );
    

  • Mod

    David_pb schrieb:

    Jo oder:

    std::find_if< std::string::const_iterator, bool (*)( std::string::value_type ) >( ... );
    

    Es genügt sogar

    std::find_if< std::string::const_iterator >( ... );
    


  • schwudde schrieb:

    Es geht darum von einer Datei Strings einzulesen die ein Komma als Trennzeichen haben da in einer Zeile mehrer Werte stehen. So sieht eine Zeile aus:

    A,00CA,GOLDSTONE GTS,35.350525,-116.888367,3038,18000,0,6000
    

    dazu benötigst Du kein find_if. Man kann sowas auch leicht direkt einlesen. Siehe dazu hier mit 'trenner' oder hier mit 'sep'.

    Gruß
    Werner


Anmelden zum Antworten