Zeichen aus der Zeichenkette herauslöschen



  • Also die Funktion soll die zwei Zeichenketten überprüfen, ob die gleichen Zeichen benutzt werden.
    Dies bedeutet, wenn in Zeichenkette 1 ein Zeichen benutzt wird, was in Zeichenkette 2 auch benutzt wird, dann sollen alle Zeichen aus Zeichenkette 1 gelöscht werden.

    Wenn ich return 0 wegmache, dann bekomme ich einen Zahlenwert jenseits der Million.

    Was mach ich da genau falsch ?!? 😕



  • Wenn ich richtig verstanden hab soll Zeichenkette 1 gelöscht werden wenn irgend ein Zeichen von Zeichenkette 1 auch in Zeichenkette 2 vorkommt???

    for(x=0;x<=ZEICHEN_KETTE_1_GROESSE;x++)
    {
      for(y=0;y<=ZEICHEN_KETTE_2_GROESSE;y++)
      {
         if(zeichen_kette_1[x]==zeichen_kette_2[y])
         {
           for(x=0;x<=ZEICHEN_KETTE_1_GROESSE;x++)
           {
             zeichen_kette_1[x]='\0';
           }
           break;
         }
      }
    }
    

    Etwa so???

    MfG 🙂



  • ich sags mal genauer.....

    Die Zeichen, die in Zeichenkette 2 + 1 gleich sind, sollen aus der Zeichenkette 1 rausgelöscht werden.
    Danach soll diese neue Zeichenkette 1 ausgegeben werden.

    Ich bin immer noch am überlegen, wie ich die Funktion richtig anspreche im Hauptprogramm. Denn ie Funktion funktioniert schon von ihrer Logik her, aber an sich weiß ich sie nicht ganz so recht einzusetzen.

    @ hohesC:
    Haste da in dieser Hinsicht eine Idee ? 😉



  • in der Annahme das Zeichenkette 1 + 2 gleichgross sind
    dabei ist SIZE so gross wie die groesse einer einzelnen Zeichenkette.

    for(x=0;x<=SIZE;x++)
    {
      if(zeichen_kette_1[x]==zeichen_kette_2[x])
      {
        zeichen_kette_1[x]='\0';
      }
    }
    

    Das Checkt jetzt ob Bsp.:
    zeichen_kette_1[3] = zeichen_kette_2[3]
    wenn beide gleich sind überschreibt er mit '\0'!

    MFG



  • hohesC schrieb:

    in der Annahme das Zeichenkette 1 + 2 gleichgross sind
    dabei ist SIZE so gross wie die groesse einer einzelnen Zeichenkette.

    for(x=0;x<=SIZE;x++)
    {
      if(zeichen_kette_1[x]==zeichen_kette_2[x])
      {
        zeichen_kette_1[x]='\0';
      }
    }
    

    Das Checkt jetzt ob Bsp.:
    zeichen_kette_1[3] = zeichen_kette_2[3]
    wenn beide gleich sind überschreibt er mit '\0'!

    MFG

    so bin re...

    Wenn er aber beide Zeichenketten mit '/0' überschreibt, dann löscht er doch deren Inhalt. Dies wäre gerade nicht, was ich erreichen will.



  • Nein das tuts nicht wenn z.B. das zeichen zeichen_kette_1[3] gleich dem von
    zeichen_kette_2[3] ist, überschreibt er bloß zeichen_kette_1[3] mit '\0'!!!
    Teste es doch mal!!!

    MFG 😉



  • #include <stdio.h>
    
    #define SIZE 10
    // Squeeze gibt keinen Wert zurück, sondern wird nur als reine Rechenfunktion genutzt //
    int squeeze(int s1[], int s2[]);
    
    int main() // int main() wird normalerweise benutzt //
    {
      int Ergebnis1, Ergebnis2, Eingabe1, Eingabe2, Ergebnis, x;
      char Zeichen_kette_1[SIZE];
      char Zeichen_kette_2[SIZE];
      for (x = 0; x <= SIZE; x++)
      {
        if (Zeichen_kette_1[x] == Zeichen_kette_2[x])
        {
          Zeichen_kette_1[x] = '\0';
        }
          Ergebnis = squeeze(&Eingabe1, &Eingabe2);
          printf("Hier steht das Ergebnis %d\n", Ergebnis); // Ausgabe der Werte aus squeeze //
      }
    
        printf("\n /-- Die Zahlen sind gleich --/ \n");
    }
    

    so ist das Hauptprogramm nun, aber die Eingabe, um die es mir eigentlich ging, konnte ich immer noch nicht realisieren. Da bräuchte ich noch etwas Hilfe !



  • Moment ich code das ganze Prog. mal geschwind!!!



  • hohesC schrieb:

    Moment ich code das ganze Prog. mal geschwind!!!

    Boah wäre erste Sahne... ich muss nur auch alles verstehen, was es bedeuten soll, weil ich nachher den Kram auch erklären können muss, aber des wird schon möglich sein ! 😉



  • brauchst du die squeeze funktion unbedingt?



  • Sie ist Bestandteil der Aufgabe eigentlich, aber schreib erstmal das Programm, wie du dir das denkst und dann kann man ja sicher noch eine Lösung mit der squeeze-Funktion machen.

    😉



  • #include <stdio.h>
    
    #define SIZE 10
    
    void main()
    {
      char eingabe1[SIZE],eingabe2[SIZE];
    
      int x;
    
      printf("Bitte gib den ersten Wert ein:\n");
      gets(eingabe1);
      printf("Bitte gib den zweiten Wert ein:\n");
      gets(eingabe2);
    
      for(x=0;x<=(SIZE-1);x++) // SIZE-1  Da es ja bei 0 beginnt 0,1,....9  //
      {
        if(eingabe1[x]==eingabe2[x])
        {
          eingabe1[x]=' ';
        }
      }
      for(x=0;x<=(SIZE-1);x++)
      {
        printf("%c",eingabe1[x]);
      }
    }
    


  • Vergiss des vorherige ich hab kapiert was du willst!!!

    #include <stdio.h>
    
    #define SIZE 10
    
    void main()
    {
      char eingabe1[SIZE],eingabe2[SIZE];
    
      int x,y;
    
      for(x=0;x<=(SIZE-1);x++)
      {
        eingabe1[x]='\0';
        eingabe2[x]='\0';
      }
    
      printf("Bitte gib den ersten Wert ein:\n");
      gets(eingabe1);
      printf("Bitte gib den zweiten Wert ein:\n");
      gets(eingabe2);
    
      for(x=0;x<=(SIZE-1);x++) // SIZE-1  Da es ja bei 0 beginnt 0,1,....9  //
      {
        for(y=0;y<=(SIZE-1);y++)
        {
          if(eingabe1[x]==eingabe2[y])
          {
            eingabe1[x]='\0';
          }
        }
      }
      for(x=0;x<=(SIZE-1);x++)
      {
        printf("%c",eingabe1[x]);
      }
    }
    

    TESTE DAS MAL DAS SOLLTE NACH DEINEN VORSTELLUNGEN LAUFEN!!! ⚠

    😃



  • Klappt bisher ganz prima das Programm.

    Aber es gibt noch einige Punkte dran zu bearbeiten, denn an sich muss das Programm:
    - Die Löschung von Zeichen bei gemischten Zeichenketten (derzeit kann ich nur Zeichen aus Ketten löschen, die nur aus Zahlen oder Buchstaben bestehen)
    - Die Funktion "squeeze" muss in das Programm eingebaut werden (Hierbei sind wir wieder bei meinem Grundproblem vom Anfang)

    Aber erstmal danke ich dir hohesC 😉 *g*.
    Gute Sache und gar nicht mal lang vom Quellcode her. Willste mir weiter helfen ?

    Edit 1: Yes die zweite Version funktioniert ebenso gut ;). Meinste wir bekommen zusammen, vielleicht das Programm mit dem squeeze hin. Ist halt etwas aufwendiger denk ich mal, aber an sich verfolgt es ja die gleichen Programmanweisungen.



  • Klar das schaffen wir!!! 😉 👍

    Poste mal die ganze Aufgabe!



  • Ja hat funktioniert und ich hab das mal eingegeben, was du gesagt hast 😉

    Sehr genial muss ich da sagen !
    Manchmal denk ich, dass ich hier im Forum zu viel frage, aber ich machs einfach.

    Den Befehl gets kannte ich vorher auch nicht. Der liest anscheinend nur ein und ist besser als "scanf".

    printf("Bitte gib den ersten Wert ein:\n");
      gets(eingabe1);
      printf("Bitte gib den zweiten Wert ein:\n");
      gets(eingabe2);
    

    Mit "scanf" hatte ich immer das Problem, dass ich nie Buchstaben und Zahlen in eine Zeichenkette bringen konnte. Dadurch hatte ich schon vornherein ein Eingabeproblem, aber nun kenn ich ja einen neuen Befehl in dieser Hinsicht. 👍



  • dann kennst du puts,fgets...... auch nicht 😉 (lernst du noch kennen! 💡 )

    Ok aber wir müssen das ja noch mit dem squeeze machen.
    Was soll squeeze machen?
    Oder poste die ganze Aufgabe!

    PS: Nur wer fragt kommt weiter!!!



  • Es gibt also eine vorgefertitgte Funktion, die man umbauen soll und daraus dann das Programm schreiben soll, was die eben genannten Aufgaben ausführen soll.

    int squeeze(char s1[], char s2[])
    {
      int i, j, k; // Variablen mit Integertypen //
    
      for (i = k = 0; s1[i] != '\0'; i++) // "i" und "k" werden initialisiert, indem sie den Wert 0 bekommen //
      {
        for (j = 0; s2[i] != '\0' && s2[i] != s1[i]; j++) // Zeile 2 ist ungleich 0 und Zeile 2 ist ungleich Zeile 1 !!!  //
    
        if(s2[i] == '\0') // Wenn Zeile 2 gleich 0 ist, dann werden die folgenden Anweisungen ausgeführt //
          s1[k++] = s1[i]; //  //
      }
      s1[k] = '\0'; //  //
    }
    

    Die Aufgaben sind wie gesagt die gleichen, wie bei dem was du geschrieben hast @ hohesC.

    Originalaufgabenstellung: Schreiben sie eine Variante von squeeze(s1,s2), die jedes Zeichen aus s1 entfernt, das in der Zeichenkette s2 vorkommt.



  • Ach egal ich nehm mir die Zeit!



  • ne hat Zeit.... können ja dann morgen wieder zusammen hier im Forum was erarbeiten.

    Ich programmiere jetzt mal ein bißchen noch am Code herum, um zu sehen, was ich noch so für Features einbauen kann.

    THX für alles schon mal !


Anmelden zum Antworten