CStringArray an Methode übergeben?



  • ... hatte ich vergessen.

    Alles war in meinem ersten Post bereit korrekt implementiert/deklariert.

    Fehlermeldung bleibt die gleiche... 😞

    Gruß
    Alexander



  • Wenn du nur suchst, solltest du lieber eine const Referenz als Parameter nutzen, anstatt eine Kopie des Arrays zu machen.



  • Ich wollte diese Lösung nur verfolgen, weil ich es nicht besser kann. 🙂

    Hast Du evtl. ein kleines Beispiel?

    Gruß und Danke
    Alexander



  • int FindInArray(const CStringArray& MyArray, CString MySearchWord );
    

    So habe ich das gemeint. Dadurch sparst du dir das Kopieren, was natürlich performanter ist.
    Zum Suchen kannst du aber auch std::find aus der STL benutzen( im Header <algorithm>) Kann aber sein da musst du dir erst ein Funktionsobjekt schreiben, ich weis jetzt nicht inwieweit CStringArry Iteratoren anbietet.



  • Ich probier's aus und melde mich wieder.

    Danke und Gruß
    Alexander



  • Wenn ich meine Methode so deklariere:

    int FindInArray( const CStringArray& MyArray, CString SearchText )
    {
    	CString test;
    	test = MyArray.ElementAt( i );
    
    	//
    	return 1;
    }
    

    bekomme ich als Fehler

    C:\***\MyDlg.cpp(1376) : error C2662: 'ElementAt' : this-Zeiger kann nicht von 'const class CStringArray' in 'class CString
    Array &' konvertiert werden
    

    Also wie greife ich dann innerhalb der Methode auf das Array zu?! :=)

    Vielen Dank

    Gruß
    Alexander



  • #include <algorithm>
    
    using namespace std;
    
    ...
    
    CString findeMich(_T("Hello world"));
    CString* strEnd = strArray.GetData() + strArray.GetCount();
    
    if (find(strArray.GetData(),strEnd,findeMich) != strEnd)
    {
        AfxMessageBox(_T("Gefunden!"));
    }
    

    Ist jetzt ungetestet kannst ja mal schauen, ob das geht.



  • Das Beispiel hat mit dem vorherigen nichts mehr zu tun, oder?

    By the way: Das ganze Procedere soll mir den Schlüssel (index) eines Suchwortes innerhalb eines CStringArray zurückgeben.

    // Beispiel:
    CStringArray testArray;
    testArray.Add( "Eins" );
    testArray.Add( "Zwei" );
    testArray.Add( "Drei" );
    
    int Key;
    Key = FindInArray( testArray, "Zwei" );
    
    // Ergebnis wäre index = 1. (also 2. Element)
    

    Gruß
    Alexander



  • #include <algorithm>
    
    int findIndex(const CStringArray& strArray,const CString& findThis)
    {
    	const CString* strBegin = strArray.GetData();
    	const CString* strEnd = strBegin + strArray.GetSize();
    	const CString* strFind = std::find(strBegin,strEnd,findThis);
    
    	if (strFind != strEnd)
    	{
    		return strFind - strBegin;
    	}
    
    	return -1;
    }
    


  • Läuft, funzt und hat Luft! 🙂

    Vielen, vielen Dank

    Gruß
    Alexander


Anmelden zum Antworten