Suchfunktion für C-Strings alá std::string.find nur case-insensitive und unicode-unabhängig ?
-
Habt ihr da was parat
?
-
Hm mal auf die Schnelle:
#include <Windows.h> #include <String> #include <Algorithm> typedef std::basic_string<TCHAR, char_traits<TCHAR>, allocator<TCHAR>> CString; inline bool cisCmpChar(TCHAR chFirst, TCHAR chSecond) { return (::toupper(chFirst) == ::toupper(chSecond)); } unsigned long cisFindStr(const CString& strFirst, const CString& strSec) { CString::const_iterator itPos = std::search(strFirst.begin(), strFirst.end(), strFirst.begin(), strFirst.end(), cisCmpChar); if(itPos == strFirst.end()) return (static_cast<unsigned long>(CString::npos)); else return (static_cast<unsigned long>(itPos - strFirst.begin())); }Verwendung:
CString str1("Hali Hallo, Wie gehts?"), str2("hallo"), str3("wie GehTs"); cout << "Pos. von str2 in str1: " << cisFindStr(str1, str2) << endl; cout << "Pos. von str3 in str1: " << cisFindStr(str1, str3) << endl;
-
Was soll den "Unicode-Unabhägig" sein??? IMHO basieren alle "suchfunktionen" auf Unicode, da nur hier eindeutig definiert ist wie was zu bewerten ist (siehe auch meinen Artikel zu Unicode hier im Forum).
Wenn Du es von Hand machen willst, so benötigst Du "LCMapString" mit LCMAP_SORTKEY.
Das einfachste ist aber "CompareString".