strings zählen



  • wie kann ich von einem Satz die strings vergleichen und zählen

    z.b.

    char text[10]="Das ist ein Test";

    und jetzt wollte ich dass man ein Buchstaben eingeben kann
    z.B. a

    und mir angezeigt bekommt

    a befindet sich 1mal im Satz

    Danke für eure Tipps



  • NEu178 schrieb:

    und jetzt wollte ich dass man ein Buchstaben eingeben kann
    z.B. a

    und mir angezeigt bekommt

    a befindet sich 1mal im Satz

    Du läufst mit einer Schleife über die Zeichen des Strings, vergleichst jeden Buchstaben mit deinem Zielbuchstaben, und erhöhst bei jedem Treffer eine Zählvariable.



  • Das war mir schon bewusst allerdings wie soll ich den einzelnen Buchstaben einlesen?

    wenn ich es mit getchar() mache wird er jedesmal übersprungen.

    und das vergleichen würde ich einfach mit einer for oder while schleife machen.



  • NEu178 schrieb:

    Das war mir schon bewusst allerdings wie soll ich den einzelnen Buchstaben einlesen?

    Sorry, aber dein Thema und deine Frage war nunmal "Strings zählen" und nicht "Buchstaben einlesen".

    wenn ich es mit getchar() mache wird er jedesmal übersprungen.

    Bei mir nicht, und jetzt? Vielleicht machst du was falsch? :p



  • char text[10]="Das ist ein Test";
    

    ist ein string (Zeichenkette) und vier Wörter in denen einmal 'a' vorkommt.

    Mal ganz abgesehen davon, daß char text[10] gar nicht den ganzen string speichern kann. Sehe ich auch noch sofort nach sechs Bier und acht Schnäpsen.

    Gruß an Bashar nebenbei. :p



  • NEu178 schrieb:

    ... wenn ich es mit getchar() mache wird er jedesmal übersprungen.

    Also hast du Code. Zeig den mal, dann können wir auch sagen, was daran falsch ist.

    NEu178 schrieb:

    und das vergleichen würde ich einfach mit einer for oder while schleife machen.

    Würde? Dann hast du doch keinen Code?



  • #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    const char *satz1 = "Hallo wie geht es dir";
    char input;

    printf("Please enter a character:\n");

    input=getchar();

    e=1;
    d=0;
    while(d<e)
    {

    if(satz1[d] == input)
    {
    counter++;
    }
    d++;
    e++;
    if(satz1=='\0')
    {
    d++;
    }
    }
    printf("The sentence contains %d of the character",counter );


  • Mod

    Das ist kein compilierbares Programm.
    Der Quelltext ist nicht formatiert.
    Programmierst du genau so sorgfältig, wie du deine Forenbeiträge verfasst? Du willst hier Hilfe und nimmst dir keine 5 Sekunden, um einen vernünftigen Beitrag zu verfassen. Sollen doch die Leser die ganze Arbeit machen 🙄 .



  • sorry das ist nur ein Teilabschnitt von einem Programm wollte nicht alles hochladen weil der Rest nichts damit zu tun hat. Hab erst kürzlich angefangen programmieren zu lernen.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int main()
    {

    const char *satz1 = "Hallo wie geht es dir";
    char input;

    printf("Please enter a character:\n");

    input=getchar();

    e=1;
    d=0;
    while(d<e)
    {

    if(satz1[d] == input)
    {
    counter++;
    }
    d++;
    e++;
    if(satz1=='\0')
    {
    d++;
    }
    }
    printf("The sentence contains %d of the character",counter );

    return 0;
    }


  • Mod

    Nutz die Codetags! Nutz die Vorschau, ob dein Beitrag auch wirklich formatiert ist! Wenn du Fehler zur Laufzeit hast, dann poste ein compilierbares Programm, sonst können wir deinen Fehler nicht nachvollziehen. Wenn dein eigentliches Programm länger ist, dann poste ein Minimalbeipiel. Wahrscheinlich findest du beim Erstellen des Minimalbeipiels bereits deinen Fehler.

    if(satz1=='\0')
    

    Das ist sicher nicht, was du möchtest. Allgemein böte sich hier sicher eher eine Schleife mit nur einer Zählvariablen an. Dieses Konstrukt hier mag zwar durchaus funktionieren, ist aber umständlich. Geh einfach so lange durch deine Zeichenkette, bis du auf
    '\0' triffst. Es ist nicht nötig, irgendwie auf das nächste Zeichen zu gucken.



  • Also hab jetzt gut rum probiert und nachgelesen aber es klappt nicht !!!

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int main(int argc, const char * argv[])
    {

    const char *satz1 = "Hallo wie geht es dir";
    char input[2];
    int d;

    printf("Please enter a character:\n");
    scanf("%s",&input);

    for(d=0;d==satz1['\0'];d++)
    {
    if((satz1[d]==input[0]))
    {
    counter++;
    }
    }
    printf("The sentence contains %d of the character",counter );

    return 0;
    }



  • Du musst solange durch den Text gehen, solange du das Endezeichen ('\0') nicht gefunden hast.

    Das geht z.B: mit for

    for (int i = 0;satz != '\0'; i++)
    {
     mach was mit satz[i]
    }
    

    satz1['\0'] ist da gleich wie satz1[0], was bei dir das große H ist.
    Nach ASCII ist das 72.

    Dein Schleife lautet also [i]for(d=0;d==72;d++)*



  • Leider versteht ich absolut deine for schleife nicht.

    satz[i:8ad04befb6] != '\0' ???

    Aber das einlesen des string und das vergleichen der string Elemente ist richtig ?



  • Oh, ein Fehler von der Formatierung

    for (int i = 0;satz[i ] != '\0'; i++)
    {
     mach was mit satz[i]
    }
    

Anmelden zum Antworten