Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Removeat() Problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.11.2003, 17:21 Uhr
~moritz
Gast


Hallo,
ich glaube ich werde langsam verrückt!
Ich habe mir mit Visual C++ und der MFC ein Programm gebastelt, das aus einem CArray alle identischen String-Elemente löschen soll. Aber ist es ganz egal was ich mache, niemals funktioniert es zu 100%. Entweder schmiert er gleich wegen irgendwelcher Überlauffehler ab, oder er löscht nicht zwei oder drei direkt hintereinander liegende gleiche Elemente, dann wieder nicht die weiter voneinander entfernten.
Ich komme jedenfalls irgendwie nicht mehr weiter. Habe auch schon in diversen Foren nach Hilfe gefragt, aber nirgendwo konnte man mir richtig helfen. Zwar wurde mir empfohlen mit Vektoren zu arbeiten, da das moderner wäre, hat aber leider nicht geklappt. Hier mal mein Code:

C++:
DatenArrayZW.Copy(DatenArray);
int i=0, i2=1;
while(i < ArraySize)
    {
        while(i2 < ArraySize)
        {
            if(DatenArrayZW.GetAt(i2) == DatenArray.GetAt(i))
            {
                DatenArray.RemoveAt(i,1);
                if(i != 0)
                {
                    i--;
                }
            }
            i2++;
            ArraySize = DatenArray.GetSize();
            DatenArrayZW.Copy(DatenArray);
        }
        i++;
    }


Ihr seit meine letzte Hoffnung!!!
Irgendeine Idee??

moritz


Vielen Dank,
moritz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.11.2003, 18:37 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Also ich steig nicht so ganz durch was du da gemacht hast. Was auf jeden Fall wesentlich einfacher sein sollte ist wenn du von CString die mehtode compare benutzt. dann kannst du zwei strings direkt vergleichen und musst nicht jedes zeichen einzeln vergleichen
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 19.11.2003 um 18:38 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.11.2003, 20:08 Uhr
~moritz
Gast


ich vergleiche nicht die einzelnen Zeichen eines Strings, sondern die CString-Elemente eines CArrays. Glaube ich jedenfalls

moritz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.11.2003, 22:24 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ja sorry habs nicht richtig gelesen *peinlich*
Ich kann mit dem CArray nicht umgehen weil ichs noch nicht benutzt habe
auf die schnelle komm ich auf diese vectorlösung

C++:
std::vector<std::string> datenarray;

datenarray.push_back("Windalf");
datenarray.push_back("0xdeadbeef");
datenarray.push_back("Uwe");
datenarray.push_back("Uwe");
datenarray.push_back("Pablo");
datenarray.push_back("(un)wissender");
datenarray.push_back("virtual");
datenarray.push_back("Spacelord");
datenarray.push_back("mike");
datenarray.push_back("usw...");
datenarray.push_back("0xdeadbeef");
datenarray.push_back("usw...");
datenarray.push_back("0xdeadbeef");
datenarray.push_back("0xdeadbeef");
datenarray.push_back("usw...");
datenarray.push_back("Pablo");
datenarray.push_back("(un)wissender");
datenarray.push_back("virtual");
datenarray.push_back("virtual");
datenarray.push_back("virtual");
datenarray.push_back("virtual");
datenarray.push_back("virtual");
datenarray.push_back("(un)wissender");

std::vector<std::string>::iterator i,j;

for(i=datenarray.begin();i!=datenarray.end();++i)std::cout<<i->c_str()<<std::endl;

for(i=datenarray.begin();i<datenarray.end()-1;++i)
    for(j=i+1;j<datenarray.end();++j)
        if(!strcmp(i->c_str(),j->c_str()))datenarray.erase(--j+1);

std::cout<<std::endl<<std::endl;
for(i=datenarray.begin();i!=datenarray.end();++i)std::cout<<i->c_str()<<std::endl;


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.11.2003, 18:20 Uhr
~moritz
Gast


SUPER!!!!
Es funktioniert!!!!
Weißt du, oder jemand anderes, zufälliger Weise noch, wie man den Inhalt des Vektors jetzt noch wieder in einen CString speichern kann, da ich CString zum Speichern in eine Datei benötige.

VIELEN DANK,
moritz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.11.2003, 18:52 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


na ich habe ja einen vector von std::strings verwendet

zugreifen kannst du auf die elemente wie mit nem array (also z.b. [])
mit der funktion c_str() bekommst du nen char-array das du direkt deinem CString zuweisen kannst.



C++:
CString str;
std::vector<std::string>::iterator i;
for(i=datenarray.begin();i!=datenarray.end();++i){str=i->c_str(); AfxMessageBox(str);}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: