Zeichen aus der Zeichenkette herauslöschen



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



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


Anmelden zum Antworten