Funktion erstellen!



  • Hallo zusammen,

    bin schon seit ein paar Stunden mit meiner Studienarbeit beschäftigt und komm einfach nicht auf den Fehler.

    Und zwar soll ich ein Programm schreiben, welches eine Zeichenkette und ein gesuchtes Zeichen einliest und dann ausgibt wie oft dieses Zeichen in der Zeichenkette vorkommt.

    Hier mein Programmtext:

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

    int count_char(int zeichen,char str[])
    {
    int i;
    for (i=0;i<strlen(str);i++)
    {
    if (zeichen == str[i])
    i++;
    }
    return i;
    }
    int main (void)
    {
    char str[10];
    int wert, zeichen;
    printf("Bitte Zeichenkette (Zahlen) eingeben:\n");
    scanf("%s", str);
    printf("Bitte die gesuchte Zahl eingeben eingeben:\n");
    scanf("%d", &zeichen);
    wert = count_char(zeichen,str);
    printf("Die gesuchte Zahl wurde %d-mal gefunden", wert);

    return 0;
    }

    Wäre Klasse wenn sich jemand die Mühe macht mir zu helfen.

    Grüße

    MeKing



  • Wofür ist das i in count_char da?

    Und was gibst du ein?

    Ist dir der Unterschied zwischen 1 und '1' klar (dem Wert 1 und dem Zeichen, das die 1 darstellt)?



  • C oder C++, welches Schweinderl hättens denn gern?



  • [quote="DirkB"]Wofür ist das i in count_char da?

    Und was gibst du ein?

    Ist dir der Unterschied zwischen 1 und '1' klar (dem Wert 1 und dem Zeichen, das die 1 darstellt)?[/quote]

    das i in count_char brauche ich ja einmal für die vorschleife und einmal als ausgabewert dafür wie oft die gesuchte Zahl in der Zeichenkette vorkommt.

    Ich weiß leider nicht was du mit 1 und "1" meinst...

    danke für deine Antwort!

    [quote="Scorcher24"]C oder C++, welches Schweinderl hättens denn gern?[/quote]

    Ist alles in C.

    Dir auch danke!



  • MeKing schrieb:

    das i in count_char brauche ich ja einmal für die vorschleife und einmal als ausgabewert dafür wie oft die gesuchte Zahl in der Zeichenkette vorkommt.

    Das sind zwei sehr verschiedene Sachen.
    Meinst du, die kann man in einer Variable vereinen?

    MeKing schrieb:

    Ich weiß leider nicht was du mit 1 und "1" meinst...

    ⚠ Ich habe '1' geschrieben nicht "1". Großer Unterschied.

    1 entspricht dem Wert 1.
    '1' ist das Zeichen, dass die Ziffer 1 darstellt. Der Wert hängt von der Codierung ab. Bei ASCII ist es der Wert 49.
    "1" ist ein Zeiger auf ein Stringliteral (Zeichenkette), das neben der '1' noch aus dem Endezeichen '\0' besteht.

    Lass das mal mit Zahlen sein und nimm erstmal Buchstaben.
    (Dann Funktioniert das auch mit Ziffern.)



  • Wieso wird ein int mit einem char verglichen? Wenn du die ASCII 1 suchen willst musst du zu deinem eingelesen Ganzzahlwert + 48 rechnen bevor du vergleichst.

    '1' = 49 = 48 +1
    '2' = 50 = 48 +2
    '3' = 51 = 48 +3



  • Ein int kann auch ein Zeichen aufnehmen.*
    Und es muss nicht 48 sein.
    Das Zeichen '0' ist besser.

    Denn '1' = 49 gilt bei ASCII
    '1' = '0' + 1 gilt bei jeder Codierung.

    *Ein char ist auch nur ein Ganzzahltyp mit eingeschränktem Wertebereich.



  • Habe die Aufgabe jetzt folgendermaßen gelöst:

    #include <stdio.h>
    #include <string.h>
    #define anzahl 10

    int count_char(char zeichen[anzahl],char str[anzahl])
    {
    int i, j=0;
    for (i=0;i<strlen(str);i++)
    {
    if (str[i] == zeichen[0])
    j++;
    }
    return j;
    }
    int main (void)
    {
    char str[anzahl], zeichen[anzahl];
    int wert;

    printf("Bitte Zeichenkette (Buchstaben) und danach den gesuchten Buchstaben eingeben:\n");
    scanf("%s ", str);
    scanf("%s", zeichen);
    wert = count_char(zeichen,str);
    printf("Der gesuchte Buchstabe wurde %d-mal gefunden", wert);

    return 0;
    }

    Danke für eure Hilfe! 👍



  • Nicht ganz, jetzt kannst du nämlich beliebig viele Zeichen zum suchen eingeben. -Das würde deinen Count zerhauen.



  • inflames2k schrieb:

    Nicht ganz, jetzt kannst du nämlich beliebig viele Zeichen zum suchen eingeben. -Das würde deinen Count zerhauen.

    Er sucht ja nur nach dem ersten Zeichen.

    Makros werden in C groß geschrieben, damit man sie von Variablen unterscheiden kann.

    Und du solltest die Länge deiner Eingabe begrenzen.

    scanf("%9s ", str);
    scanf("%9s", zeichen);
    

    Mit Makros ist das, bei scanf, etwas blöd zu machen.



  • Müßte doch mit

    scanf("%*s ", ANZAHL-1, str);
    

    gehen, oder?



  • Nein

    scanf schrieb:

    * An optional starting asterisk indicates that the data is to be read from the stream but ignored (i.e. it is not stored in the location pointed by an argument).

    Nachzulesen: http://www.cplusplus.com/reference/cstdio/scanf/

    Bei printf kann man mit dem * die width und precision als Parameter übergeben.

    Schließe nie von printf auf scanf und umgekehrt. Das sind zwei verschieden Funktionen.


Anmelden zum Antworten