hallo, ich habe folgendes Problem, ich muss die Parameter durchlaufen und die c durch C erstetzen, bevor sie in den Vektor kommen, aber kein Plan wie ich das bewerkstelligen soll.
Vielleicht hat ja jemand einen Lösungsvorschlag von euch
Alles geht, nur die c in C Umwandlung nicht ;(
Vielleicht hat ja jemand einen Lösungsvorschlag von euch
Alles geht, nur die c in C Umwandlung nicht ;(
Code:
// +---------------------------------------------------------------------------
// + auswerten - die Funktion baut einen Vektor aus den Zeichenketten,
// + die die Funktion "match" aus jedem Parameter isoliert und ersetzt
// + darin alle Buchstaben 'c' durch 'C' bevor sie im Vektor abgelegt
// + werden. Die Parameter liegen in der von der Kommandozeile her
// + bekannten Struktur vor mit entsprechender Bedeutung von argv.
// + Rückgabewert bei Fehlern -1, sonst 0,
// + Beispiel: entspricht die über argv greifbare Datenstruktur der
// + Kommandozeile "pr56ocs adcbcc67@ x56Bobc1234@ 7dc5c55--"
// + so muss der Vektor genau vier Einträge enthalten mit:
// + v[0] == ""
// + v[1] == "dCbCC67"
// + v[2] == "56BobC1234"
// + v[3] == "dC5C55"
// +---------------------------------------------------------------------------
int auswerten(char const **argv, vector<string>& v)
{
// ---> Ihr Code hier:
//Fehlerkontrolle
if( !argv || !*argv) return -1;
//match Fkt. aufrufen und mit deren Ergebnis einen Vektor bauen:
for (const char **pp=argv; *pp; ++pp) v.push_back(match(*pp));
return 0;
}
// +---------------------------------------------------------------------------
// + match - extrahiert den Teil einer null-terminierten Zeichenkette, der
// + dem regulären Ausdruck "(dc|56).*c.*[0-9]" entspricht.
// + Rückgabewert ist die gefundene Zeichenkette, sonst der leere string.
// + Achtung: Benutzen Sie zum Zugriff auf einzelne Zeichen der Zeichenkette
// + nur Zeiger und den Dereferenzierungsoperator *. Die Zeichenkette soll
// + außer zum Kopieren der gefundenen Teilkette in einen string maximal
// + zweifach durchlaufen werden.
// +---------------------------------------------------------------------------
string match(char const *p)
{
//einen leeren string fuer die Rueckgabe
string leer="";
//Pointer p ok?
if(!p) return leer;
//den ersten Teil finden
const char *partone=0;
for( ; *p; ++p) {
if ( ((*p=='d') && (*(p+1)=='c')) || ((*p=='5') && (*(p+1)=='6')) ) {
partone=p; break;
}
}
//partone gesetzt?
if(!partone) return leer;
//Pointer p weiterschieben:
p+=2;
//mittleren Teil finden
const char *parttwo=0;
for ( ; *p; ++p) {
if (*p=='c') { parttwo=p; break;}
}
//parttwo gesetzt?
if(!parttwo) return leer;
//Pointer p weiterschieben:
++p;
//den letzten Teil finden:
const char *partthree=0;
for ( ; *p; ++p) {
if (isdigit(*p)) partthree=p;
}
//partthree gesetzt?
if(!partthree) return leer;
//ausschneiden
string rueckgabe="";
for ( ; partone!=(partthree+1); ++partone) rueckgabe+=*partone;
return rueckgabe;
}
Zuletzt bearbeitet: