Zeichenketten Funktion

seriously

Mitglied
Der Funktion Str_DelStringChars werden zwei Zeichenketten übergeben .
Es soll jedes Vorkommen der Characters in der zweiten Zeichenkette in der ersten entfernt werden.
Es muss eine Hilfszeichenkette angewendet werden!
Beispiel: 1.Zeichenkette: "Hallo Welt"
2.Zeichenkette: "alo"
Funktionsergebnis : "H Wet"

Ich habe den Quelltext geschrieben, aber weiß nicht wo der Fehler liegt.
Es wird immer nur die erste Zeichenkette ausgegeben, hier: "Hallo Welt".

Code:
Code:
char *Str_DelStringChars( char *s, char *t)
{
   char *rs;
   char *dummy;
   int is;
   int id;
   int it;

   dummy = strdup (s);

   if ( dummy == NULL ){
      rs = NULL;
   }else{
      id=0;
      is=0;
      it=0;
      while (s[is] != '\0' && dummy[id] != '\0' && t[it] != '\0'){
            if (dummy [id] == t[it]){
               s[is] = '\t';
               is++;
            }else{
               s[is] = dummy[id];
            }
            id++;
            is++;
            it++;
      }
   free(dummy);
   rs=s;
   }
   return rs;
}
 
Zuletzt bearbeitet:
Hallo seriously,

Bitte nicht die Themen pushen, erst recht nicht nach nur einer Stunde!

Da deine Funktion keine Ausgabe hat ist das gepostete Beispiel eigentlich nicht ausreichend.

Aber was man bereits sagen kann ist, dass deine Funktion nicht ganz korrekt vorgeht. In deiner while-Schleife gehst du in allen char-Arrays eine Position weiter, vor allem auch im Array mit den Buchstaben, die gelöscht werden sollen. Beispielsweise folgende Situation:
s = Hallo Welt\0
t = W\0
dummy = Hallo Welt\0

1. Schritt:
s[is] -> H
t[it] -> W
dummy[id] -> H
++is, ++it, ++id

-> 2. Schritt:
s[is] -> a
t[it] -> \0
dummy[id] -> a
-> Abbruch, da t[it] == \0

Gruss
Muepe
 
Du musst entweder den String für jeden zu löschenden Buchstaben einzeln durchgehen oder für jeden Buchstaben des Strings einmal durch alle zu löschenden Buchstaben iterieren.
 
Wo ist denn das Problem?
Innerhalb der ersten Schleife, die entweder alle zu löschenden oder alle zu durchsuchenden Buchstaben durchgehst hast du eine weitere Schleife die dann entsprechend durch die andere Gruppe geht.
Pseudocode:
Code:
for_each(buchstabe b in string)
{
   for_each(buchstabe l in zuLöschen)
   {
      if(b == l)
      {
         b = '\t';
         break;
      }
   }
}
 
So ?

Code:
while (s[is] != '\0' && dummy[id] != '\0'){
            while (t[it] != '\0'){
                  if (dummy [id] == t[it]){
                     s[is]= '\t';
                  }else{
                     s[is]=dummy[id];
                  }
            }
            id++;
            is++;
            it++;
      }
 
Mehr oder weniger, ja. Momentan ist deine innere Schleife noch eine Endlosschleife, da dein Index in der äusseren Schleife erhöht wird.
 
Jetzt hab ich es so , aber es wird nix ausgegeben

Code:
while (s[is] != '\0' && dummy[id] != '\0'){
            while (t[it] != '\0'){
                  if (dummy [id] == t[it]){
                     s[is]= '\t';
                  }else{
                     s[is]=dummy[id];
                  }
                  id++;
                  is++;
                  it++;
                  }
      }
 
Zurück