Anzahl buchtaben eines Strings bestimmen

Gast #3013507
Lesenswert?

Hallo, ich will ein Programm schreiben zur ermittlung der Buchstaben 
eines Strings. Allerdings liefert das Programm falsche Ergebnise. Es 
wird zwar ne Zahl angezeigt aber nicht die Anzahl der eingegebenen 
Buchstaben.

#include <stdio.h>
#include <stdlib.h>
// Prototyp
int anzahlderBuchstab(char z[]);

int main(void){

    char zk[];
    printf("Gib Zeichenkette ein: \n");
    scanf("%s", zk);
    printf("Anzahl Buchstaben der Zeichenkette %s: %d\n", zk, 
anzahlderBuchstab(zk));

    return 0;
}
// vollständige Funktion
int anzahlderBuchstab(char z[]){
    int buchstaben=0;
    char *ptr_z;
    ptr_z = &z;

    while(*ptr_z != '\n'){
        if(*ptr_z >= 'A' && *ptr_z <= 'Z' || *ptr_z >= 'a' && *ptr_z <= 
'z'){
            buchstaben++;
        }
        ptr_z++;
    }
    return buchstaben;
}
Weiß jemand waran das liegen könnte?

Besten Dank, schonmal
Stefan
Gast #3013539
Lesenswert?

Peter II schrieb:
> Stefan schrieb:
>> Ne :), daran lags. Habe jetzt noch das letzte Element mit '\n' belegt.
>> Und Danke für deine Hilfe.
>
> und warum nicht wiè in C üblich auf 0 abfragen?

Gute Frage eigentlich wollte ich das der string gescannt wird bis zum 
letzten Element und als letzes element ist doch immer 0 oder? Dann ist 
es wirklich einfacher.
#3013611
Lesenswert?

Peter II schrieb:
> und diese macht nichts anders als im string nach der ersten 0 zu suchen.

Ja klar, und genau das möchte doch der TO, oder nicht? ;-)
Wollte das nur erwähnen, vielleicht hat der TO die Funktion nur darum 
selber geschrieben, weil er nicht wusste, dass es das schon gibt. Ob er 
die nun nutzen will oder nicht, das ist natürlich ihm überlassen.

> Damit ist es programm dann doppelt so langsam, weil der string 2 mal
> komplett durchsucht wird.

Da der TO vermutlich sein Programm auf einem PC laufen lassen möchte 
(nicht auf einem uC) wird kaum jemand interessieren wie schnell diese 
Funktion ist.

mfg
#3016645
Lesenswert?

Peter II schrieb:

> ist zwar richtig, aber irgendwie umständlich.
>
>
1
>  char *ptr_z = z;
2
>  while( *ptr_z ){
3
>

und wofür der ptr_z notwendig ist, ist auch nicht wirklich klar. z ist 
eine lokale Variable und auch wenn sie in der Argumentliste als [] 
geschrieben ist, ist es doch ein Pointer. Überhaupt: die [] Schreibweise 
ist nicht sehr glücklich. Sie suggeriert etwas, das nicht vorhanden ist.
Der  *ptr_z++ da unten in der Funktion. Von dem ist auch nicht klar, 
wozu der gut sein soll.

Das wär meine Version:
1
#include <ctype.h>
2

3
int anzahlderBuchstab(const char* str)
4
{
5
  int buchstaben = 0;
6

7
  while( *str ) {
8
    if( isalpha(*str++) )
9
      buchstaben++;
10
  }
11

12
  return buchstaben;
13
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren