Hi
dann wollen wir mal das ganze Zerlegen:
//Das Programm soll ausgeben wieviele Ziffern sich im String
//befinden
#include
int ZiffernAnzahl(char\*s)
{
**Dir fehlt eine Variable, die die Anzahl der Zahlen zählt
'i' ist ja die Zählvariable der Schleife
int anzahl=0;**
int i;
for(i=0;s[i]!='\0';i++)
if(\*s\>='0' && \*sstatt i zu erhöhen nun die Zählvariable
{
**anzahl** ++;
}
return i;
}
**Die main() funktioniert zwar so, aber der Standart schreibt einen
Rückgabewert für die Hauptfunktion vor. Also statt 'void main()' , 'int main()' und am Schluß ein 'retrun 0;'**
**int** main(void)
{
char s[255];
printf("Bitte einen String eingeben:");
gets(s);
printf("Es kommen in diesem String %d Ziffern vor\n",ZiffernAnzahl(s));
**return 0;**
}
für die Abfrage, ob das Zeichen eine Zahl ist, kannst Du auch die Funktion ‚int isdigit(char)‘ aus der ctype.h verwenden.
Ich hab mir auch mal Gedanken gemacht. Das ist bei mir dabei herausgekommen:
int ZiffernAnzahl(char \*wort)
{
int anzahl=0;
while(\*wort++)
if ( isdigit(\*wort) ) anzahl++;
return anzahl;
}
Ich laß das ganze mal unkommentiert viel Spass beim nachvollziehen
Dieses Programm soll einen Text in Großbuchstaben umwandeln
#include
char \*ToUpper(char\*s)
{
char i;
**der Gedanke ist soweit ganz gut. Statt das Array abzugehen
derefenzierst Du immer nur das erste Element den \*s == s[0]
du zählst ja nicht den Zeiger weiter**
for(i=0;s[i]!='\0';i++)
if(s**[i]**\>='a' && s**[i]**[i] -= 'a'-'A';
}
return s;
}
**int** main(void)
{
char s[255];
printf("Bitte einen String eingeben:");
gets(s);
**einen String gibt man mit printf so aus
printf("%s",zeiger\_auf\_string)**
printf("In Grossbuchstaben sieht das so aus:
**%s** \n",**ToUpper(s)**);
**return 0;**
}
Hinweis: Aus für Die Umwandlung in Großbuchstaben gibts in der ctype.h eine Funktion : ‚char toupper(char)‘ dabei ist ja wie bekannt die Großschreibung zu beachten.
Auch hier wieder meine Version
char \*ToUpper(char \*s)
{
char \*tmp=s;
while(\*s)
{
\*s=toupper(\*s);
s++;
}
return tmp;
}
Und nun zum letzten:
Dieses Programm soll einen Buchstaben durch einen anderen
ersetzen
#include
char \*Ersetze(char\*s,char c,char d)
{
**als Zähler einen int, nicht einen char**
int i;
**Du benutzt wieder bloß das erste Zeichen, wie vorhin**
for(i=0;s[i]!='\0';i++)
**nach der Bedingung schreibst Du, was Du machen
willst, wenn sie erfüllt ist, nicht in die Klammer**
if(\*s==c: \*s=d) **statt dessen
if(s[i]==c) s[i]=d;**
**das i++ fällt weg, so überspringst Du Zeichen**
**Du hast im Fuktionskopf einen Zeiger auf einen Char
als Rückgabewert angegeben, gibst aber den
Zählerstand rurück**
return i;
**lieber so:
return s;**
}
**int** main(void)
{
char s[255];
printf("Bitte einen String eingeben:");
gets(s);
**Du willst mit printf nicht das Ergebnis der Funktion
ausgeben, gibst sie aber als Parameter an. das ist nicht gut
in dem Fall mußt Du die Funktion alleine aufrufen
Da Du ja einen Zeiger als Parameter übergibst,
ist die Zeichenkette aus so geändert
Ersetze(s);**
**printf("Der Buchstabe r wurde durch x
ersetzt);**
**return 0;**
}
Auch hier was von mir:
char \*Ersetze(char \*s,char c,char d)
{
char \*tmp=s;
while(\*s)
{
if(\*s==c)
\*s=d;
s++;
}
return tmp;
}
Noch ein letztes. Mir ist aufgefallen, daß Du immer
printf(.........., **<u>*</u>** Funktion);
schreibst. Das ‚*‘ gehört nicht zum Funktionsaufruf dazu, sondern zeigt an, das der Rückgabewert ein Zeiger auf etwas ist. Es wird daher beim Aufruf nicht mit angegeben.
Puhh, das war viel. Ich hoffe, ich konnte Dir helfen.
grüße, Micha