- Joined
- Nov 1, 2004
- Messages
- 27,878
- Points
- 460
- Lieblings C&C
Den Titel in wie fern ändern
#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;
}