[c++] parameter einlesen,bearbeiten,weiterleiten

pull

Grünschnabel
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 ;(
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:
Hi.

Vielleicht so:
C++:
#include <algorithm>

...

  //match Fkt. aufrufen und mit deren Ergebnis einen Vektor bauen:
  for (const char **pp=argv; *pp; ++pp) {
    string s = match(*pp);
    replace(s.begin(), s.end(), 'c', 'C');
    v.push_back(s); 
  }
Gruß
 

Neue Beiträge

Zurück