- Joined
- Nov 1, 2004
- Messages
- 28,019
- Reaction score
- 427
Den Titel in wie fern ändern 


vielwas muss man gar nicht ändern, um mit Strings zu arbeiten musst du eben noch <string> includen - und was evtl. noch wichtig/interessant ist, ist dass du Strings auch mit normalen Vergleichsoperatoren vergleichen kannst, also am eigentlichen Algorithmus musst du gar nichts ändern, im Prinzip sinds nur ein paar Datentypen die du ersetzen musst
wenns was spezielles oder irgendwas im Code geht dann bitte ein wenig genauer sagen wo das Problem liegt ^^
hab alles hinbekomen big thx liontiger... bekommst es noch hin mir da was einzuhauen das er duplikate löscht also quasi wenn doppelte namen reinkommen... die rausschmeißen? er soll auch via schleife suchen... ich weis nicht wo ich die machen soll!
ich weiß, die implementierung is alles andere als optimal aber wenigstens funktionierts 

#include <iostream>
#include <string>
using namespace std;
void quicksort(string *a, int left, int right)
{
if (left < right)
{
string pivot = a[right];
int l = left;
int r = right;
do
{
while (a[l] < pivot)
l++;
while (a[r] > pivot)
r--;
if (l <= r)
{
string swap = a[l];
a[l] = a[r];
a[r] = swap;
l++;
r--;
}
} while (l <= r);
quicksort(a, left, r);
quicksort(a, l, right);
}
}
/*
Überprüft ob ein String der im Parameter mit geliefert wird in einem Array
von ebenfalls gegebener Größe schon vorhanden ist.
Gibt Wert vom typ bool (true/false) zurück.
*/
bool isStringInArray(string* array, string element,int count)
{
for (int i = 0; i < count; i++)
{
if ( element.compare(array[i]) == 0 )
return true;
}
return false;
}
/*
Vergleicht über die Länge eines Arrays jeweils das aktuelle Element mit seinem
Nachfolger und erhöht einen Zähler, sofern die Elemente gleich sind.
Da jeweils nur aufeinanderfolgende Elemente verglichen werden müssen die
Elemente im Array sortiert sein.
*/
int getDuplicateCount(string* a, int count)
{
int duplicateCount = 0;
for (int i = 0; i < count-1; i++)
{
if (a[i] == a[i+1])
{
duplicateCount++;
}
}
return duplicateCount;
}
int main()
{
string values[] = {"klaus", "philipp", "hans", "sarah", "sarah", "franz", "franz", "julia", "hans", "sarah", "zeus", "jessica", "peter"};
int count = sizeof(values) / sizeof(*values);
for (int i = 0; i < count; i++)
cout << values[i] << " ";
cout << endl;
quicksort(values, 0, count - 1);
for (int i = 0; i < count; i++)
cout << values[i] << " ";
cout << endl;
//Anzahl der nicht Duplikate ist = Anzahl der Elemente - Duplikatanzahl
int nonDuplicates = count - getDuplicateCount(values,count);
/*Neues Array erstellen in dem die Werte ohne die Duplikate eingetragen
werden können*/
string newArray[nonDuplicates];
/*
Für jedes Element im Ausgangsarray prüfen ob das Element schon im neuen
Array ist - falls ja, zum nächsten Schleifendurchlauf springen, falls nein
das Element ins neue Array einfügen
*/
for (int i = 0,j = 0; i < count; i++)
{
if (isStringInArray(newArray, values[i], nonDuplicates))
continue;
else
newArray[j++] = values[i];
}
cout << endl << "Ohne Duplikate: "<<endl;
//neues Array ohne die Duplikate ausgeben
for (int i = 0; i < nonDuplicates; i++)
cout << newArray[i] << " ";
cout << endl;
system("PAUSE");
return 0;
}


da hakts dann schon wenn man die länge von nem array bestimmen will
, java machts einem viel zu einfach
so'n kleinkram müsste man echt besser hinbekommen denk ich^^