CStrings miteinander vergleichen
-
Hi,
ich hab einen CString und möchte diesen mit 10x anderen CStrings vergleichen. Gibt es hier nur die Möglichkeit
CString item ("der zu vergleichende string"); item.Compare(_T("mit dem ersten string")); item.Compare(_T("mit dem zweiten string")); //and so on
oder gibt es eine bessere schnellere Möglichkeit? Vielleicht eine schnelle Funktion die einen String mit mehreren Vergleicht und als Ergebnis zurückliefert der wievielte String passt / identsich ist?
Gruß
Jakob
-
Naja fast würde ich sagen.
Voraussetzung ist, dass der Vergleich binär erfolgen muss (also z.B. nicht case-insensitive).Dann kannst du ne CMap<CString, int> nehmen:
CMap<CString, int> KnownStrings; // Vorbereitung void Prepare() { KnownStrings[_T("ein string")] = 1; KnownStrings[_T("ein anderer string")] = 2; KnownStrings[_T("noch ein string")] = 3; KnownStrings[_T("test234")] = 4; KnownStrings[_T("xxx")] = 5; KnownStrings[_T("yyy")] = 6; } // Abfrage int FindString(CString const& str) { int index = 0; if (KnownStrings.Lookup(str, index)) return index; else return -1; }
Dadurch dass CMap intern ein Hash-Table ist, sollte es (fast) egal sein, gegen wie viele Strings du vergleichen willst. Also ob das 10 oder 100 oder 10000 sind.
Und natürlich kannst du statt dem
int
gleich was nehmen was bei deiner speziellen Anwendung vielleicht mehr Sinn macht. z.B. einen Zeiger auf eine Datenstruktur wo Informationen zum String drinnen stehen - was auch immer Sinn macht.
-
danke für den Tip, allerdings funktioniert es noch nicht....
CMap<CString*, CString*, int, int> map; CString name ("disabled"); map[&name] = 1; CString test = name; int index = 0; if (map.Lookup(&test, index)) return index; else return -1;
Es wird immer return(-1) zurückgegeben, wenn ich zum Suchen den CString test verwende.
Mach ich da irgendetwas falsch?
-
Ja, du verwendest Zeiger, wo du keine Zeiger verwenden solltest.
CMap<CString, CString, int, int> map; CString name ("disabled"); map[name] = 1; CString test = name; int index = 0; if (map.Lookup(test, index)) return index; else return -1;
-
Und warum überhaupt Lookup verwenden und nicht einfach nur den operator[], der liefert 0 wenndas Item neu ist...