#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <algorithm>
#include <vector>
#define MAXLEN 100 //eigenen Wert angeben
int main(int argc, char* argv[])
{
std::string MyString1 = "Irgendwas 10 Sonstwas";
std::string MyString2 = "Irgendwas 9 Sonstwas";
std::vector<std::string> v;
std::vector<std::string> v2; //Brauchen wir später noch
std::vector<std::string>::iterator i;
v.push_back(MyString1);
v.push_back(MyString2);
v.push_back("MyTest und nochwas"); //Hier beachten: Es wird nur bis 100 geprüft (siehe defines)
i = v.begin();
while(i != v.end())
{
printf("%s\n",i->c_str());
++i;
}
printf("\nNun sortiert:\n");
sort( v.begin(),v.end(),std::less<std::string>());
i = v.begin();
while(i != v.end())
{
printf("%s\n",i->c_str());
++i;
}
printf("\nJetzt sind die Nummern noch nicht geordnet... Machen wir mal:\n");
i = v.begin();
begin:
while(i != v.end())
{
//Sorry für die C-Funktionen, aber die beherrsche ich besser als C++
char temp[1024];
strcpy(temp,i->c_str());
char Zahl[10]; //Mehr als zehnstelig sollte die Zahl wohl nicht sein...
int ii = 0;
int ziffern = 0;
while(!isdigit(temp[ii]))
{
if(temp[ii] == '\0')
{
//damit die Einträge ohne Zahlen nicht benachteiligt sind:
v2.push_back(temp);
++i;
goto begin;
}
ii++;
}
Zahl[0] = temp[ii];
while(isdigit(temp[ii]))
{
Zahl[ziffern] = temp[ii];
ziffern++;
ii++;
}
Zahl[ziffern] = '\0';
printf("%s hat folgende Zahl: %s\n",i->c_str(),Zahl);
char fuerV2[512];
sprintf(fuerV2,"%s|%s!",Zahl,i->c_str()); // | = Beginn des strings, ! = Ende des Strings
v2.push_back(fuerV2);
//Wir leeren wieder
Zahl[0] = '\0';
++i;
}
printf("\nDas Ganze kann man jetzt nutzen:\n");
sort( v2.begin(),v2.end(),std::less<std::string>());
std::vector<std::string> v3; //Sollte der letzte sein :-)
int ii = 0;
while(ii != MAXLEN + 1)
{
i = v2.begin();
while(i != v2.end())
{
char t[512]; //Wieder ein buffer
strcpy(t,i->c_str());
if(strstr(t,"|") == NULL || strstr(t,"!") == NULL) {++i;continue;}
char* pch = strtok(t,"|");
if(pch == NULL) {++i; continue;}
if(ii == atoi(pch))
{
pch = strtok(NULL,"!");
if(pch == NULL) //da stimmt was nicht...
{
perror("Falsches Format");
return -1;
}
v3.push_back(pch);
i->erase(); //Damit es keine Doppeltreffer gibt
}
++i;
}
ii++;
}
//Der Rest in v2 ist jetzt ohne Zahlen. Holen wir die Dinge ab:
i = v2.begin();
while(i != v2.end())
{
char t[512];
strcpy(t,i->c_str());
if(isalnum(t[0])) v3.push_back(t);
++i;
}
i = v3.begin();
while(i != v3.end())
{
printf("%s\n",i->c_str());
++i;
}
printf("\nEndlich fertig!\n");
system("PAUSE");
return 0;
}