Zeichen aus der Zeichenkette herauslöschen



  • 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 !



  • Gut dann bis Morgen ich mach mir nochmal gedanken über die squeeze funktion.

    MFG 😉



  • alles klar...... man sieht sich und machs gut.

    PS: Hab dir mal eine Mail über das Formular deiner Homepage geschickt. Kannst ja mal gucken, ob des angekommen ist. 🕶



  • Morsche...

    also die Funktion squeeze liefert mir nur wirre Zahlenwerte jenseits der Million, sollte aber eine bestimmte Aufgabe erfüllen.

    void 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[j] != '\0' && s2[j] != s1[i]; j++) // Zeile 2 ist ungleich 0 und Zeile 2 ist ungleich Zeile 1 !!!  //
    
        if(s2[j] == '\0') // Wenn Zeile 2 gleich 0 ist, dann werden die folgenden Anweisungen ausgeführt //
          s1[k++] = s1[i]; //  //
      }
      s1[k] = '\0'; //  //
    }
    

    Dennoch denke ich dass die Funktion richtig ist, aber die Einbindung ins Hauptprogramm erscheint mir schwieriger ! 😞



  • Morgen! 🙂

    ich muss bloß wissen ob es wie

    1. eingabe1="Hallo"
    eingabe2="H ll "
    ergebnis=" a o"
    oder wie
    2. eingabe1="Hallo"
    eingabe2="l"
    ergebnis="Ha o"(oder ergebnis="Hao" da er alle ll löscht)

    gehen soll!? 😕



  • Also im Endeffekt soll es so sein, wie vorher bei dem Progamm, was du als letztes geschrieben hast !

    Im Prinzip wie dies hier

    2. eingabe1="Hallo"
    eingabe2="l"
    ergebnis="Ha o"(oder ergebnis="Hao" da er alle ll löscht)



  • War nix gut! 😃



  • yes ziemlich geiL..... es funktioniert ohne Probleme. Ich teste nochmal herum und sage dir dann, ob irgendwo noch etwas falsch ist, aber bis jetzt sieht es erstmal perfekt aus.

    Ich hab ja angenommen, dass die Funktion Squeeze, die ich geschrieben hatte richtig war, aber so wie du es gemacht hast, kann man es auch schreiben.
    Zudem ist es kürzer und einleuchtender.

    Und endlich hat auch einer mal geschrieben, wie ich die Funktion im Hauptprogramm anspreche, was mir am wichtigsten war, damit ich das auch in den nächsten Programmen benutzen und einsetzen kann.

    eingabe1[y] = squeeze(eingabe1[y],eingabe2[x]);
    


  • STOP UPDATE

    #include <stdio.h>
    
    #define SIZE 20
    
    char squeeze(char s1,char s2);
    
    int main()
    {
      char eingabe1[SIZE],eingabe2[SIZE];
    
      int x,y;
    
      for(x=0;x<=(SIZE-1);x++)
      {
        eingabe1[x] = ' ';
        eingabe2[x] = ' ';
      }
    
      printf("Eingabe 1:\n");
      fgets(eingabe1, SIZE, stdin); //Weils so sicher ist!//
    
      printf("Eingabe 2:\n");
      fgets(eingabe2,SIZE,stdin);  //Weils so sicher ist!//
    
      for(x=0;x<=(SIZE-1);x++)
      {
        for(y=0;y<=(SIZE-1);y++)
        {
          eingabe1[y] = squeeze(eingabe1[y],eingabe2[x]);
        }
      }
      for(x=0;x<=(SIZE-1);x++)
      {
        printf("%c",eingabe1[x]);
      }
      return(0);  
    }
    
    char squeeze(char s1, char s2)
    {
      char k= ' ';
    
      if(s2==s1)
      {
        s1 = ' ';
      }
      else
      {
        k = s1;
      }
    
      return(k);
    }
    

    in der vorherigen war ein fehler! 😃

    IS DAT GUT SO??? 👍 😕



  • Hmmm und warum nicht einfach so?

    #define MAX_EINGABE 128
    
    int main(void)
    {
       char eingabe[MAX_EINGABE], loeschen[MAX_EINGABE];
       char * suche, * akt;
    
       printf("Bitte ein Wort eingeben:");
       fgets(eingabe, MAX_EINGABE, stdin); //ist sicherer als gets()
    
       printf("Bitte die zu löschenden Buchstaben eingeben:");
       fgets(loeschen, MAX_EINGABE, stdin);
    
       for(suche = loeschen; *suche; ++suche)
       {
          for(akt = eingabe; *akt; ++akt)
          {
             if(*akt == *suche)
             {
                *akt = ' ';
             }
          }
       }
    
       printf("Und das kommt dabei raus: %s", eingabe);
    }
    


  • Hat ich auch schon vorgeschlagen aber er braucht die squeeze funktion!!!
    Ich habs übersichtlich gemacht nicht mit lauter abkürzungen.
    Man soll es ja auch einigermaßen gut entschlüsseln können.



  • hab mich schon gefragt, was die If-Schleife da soll. Ich kommentiere den Quellcode immer durch um das Verständnis dafür zu bekommen, was ich da mache und was generell da steht.

    Aber gut, dass du das nochmal gesagt hast ! 🙂



  • Ist das jetzt gut so?



  • ja auf jeden Fall ich hab nur noch eine Frage. Denn wir speichern ja den Wert aus squeeze in eingabe[y]:

    eingabe1[y] = squeeze(eingabe1[y],eingabe2[x]);
    

    printf("%c",eingabe1[x]);
    

    Ah ich hab noch eine Frage... 😉 *nerv ich weiß*

    Wird in squeeze eine Zeile verglichen oder die Zeichen ? Ich denke die Zeichen oder täusche ich mich da ?



  • for(x=0;x<=(SIZE-1);x++)
    {
      printf("%c",eingabe1[x]);
    }
    

    gibt jedes zeichen einzeln aus
    Bsp.:
    eingabe1[0]
    eingabe1[1]
    usw...

    das x ist ein int wert genau wie y diese werden im Quelltext in der Schleife hochgezählt um die einzelnen Zeichen in squeeze zu überprüfen.
    ich hätte auch

    for(w=0;w<=(SIZE-1);w++)
    {
      printf("%c", eingabe1[w]);
    }
    

    nehmen können.

    In Zeichen wieso? 😃



  • alleine schon dass s1 und s2 char-Werte sind, lässt darauf schließen, dass es einzelne Zeichen sein müssen. 🕶


Anmelden zum Antworten