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,6000Dazu 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 ) >( ... );
-
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,6000dazu benötigst Du kein find_if. Man kann sowas auch leicht direkt einlesen. Siehe dazu hier mit 'trenner' oder hier mit 'sep'.
Gruß
Werner