Zahlgruppen zählen z.B. "3434".

C_Boy

Mitglied
Hallo,

Ich hab ein Programm das Strichpunkte und Wortgruppen zaehlt, aber ich versteh das überhaupt nicht. Zumindest das Unterprogramm das die Zahlgruppen zaehlt.
Und funktionieren auch nicht so toll.

Aufgabe:

Schreiben Sie zwei Unterprogramme:
a) Ein Unterprogramm um die Leerzeichen in einem String zu zaehlen.
Uebergabe: String / Rueckgabe: Anzahl

b) Ein Unterprogramm um die Buchstaben am Wortanfang in einem String in
Grossbuchstaben zu wandeln. Leerzeichen trennen die Woerter. Ebenso ist am
Anfang des Strings ein Wortanfang.
Uebergabe: String / Rueckgabe: Anzahl der Woerter

Das Hauptprogramm soll den String anlegen, die Unterprogramme aufrufen und
das Ergebnis ausgeben. Die Unterprogramme dürfen keine Ausgabe machen.

Hier das Programm:
Code:
#include <stdio.h>
#define MAXLEN 50

int strichpunkte(char a[]);
int string_umwandeln(char a[]);

int strichpunkte(char a[])
{
	int i=0;
	int anzahl=0;

	while(a[i] != '\0')
	{
		if(a[i] == ';')
		{
			anzahl++;
		}

		i++;
	}
	return anzahl;
}

int string_umwandeln(char a[])
{
	int i=0;
	int anzahl=0;

	while(a[i] != '\0')
	{
		if(a[i] >= 'A' && a[i] <= 'Z')
		{
			a[i] = a[i]+32;
		}

		if(a[i] >= '1' && a[i] <= '9' && a[i-1] == ';' )
		{
			anzahl++;
		}

		if(a[i] >= '1' && a[i] <= '9' && a[i+1] == ';' )
		{
			anzahl++;
		}

		i++;
	}

	return anzahl;
}

int main (void)
{
	char a[MAXLEN];

	printf("Geben Sie bitte Woerter und Zahlen ein die mit Strichpunkten getrennt sind.\n");
	gets(a);
	printf("\nDie Anzahl der Strichpunkte betraegt %d.\n",strichpunkte(a));
	printf("Die Anzahl der Zahlen betraegt %d.\n\n",string_umwandeln(a));
	printf("Neuer string: %s\n\n",a);
}

LG
 
Zuletzt bearbeitet:
Hi

Warum hast du alles auf Zahlen und Strichpunkte ausgelegt?
In der Angabe steht Wörter mit Leerzeichen

Das main schaut meiner Meinung nach dann so aus:
C++:
int main ()
{
    char a[MAXLEN];
 
    printf("Geben Sie bitte einen Satz ein:\n");
    fgets(a,MAXLEN,stdin);
    printf("\nDie Anzahl der Leerzeichen betraegt %d.\n",leerzeichen(a));
    printf("Die Anzahl der Woerter betraegt %d.\n\n",anfangsbuchstaben(a));
    printf("Neuer String: ");puts(a);
    return 0;
}

Das fgets stellt sicher, dass bei mehr als MAXLEN Buchstaben keine Probleme auftreten (gets hat damit große Probleme).
MAXLEN erhöhen wäre auch ganz nett...nicht alles hat nur 50 Buchstaben.

Die Funktion strichpunkte passt soweit, außer dass sie den Namen leerzeichen bekommen sollte und auch entsprechend ' ' statt ';' nehmen sollte.

Und er Rest:
C++:
char grossmachen(char x)
{
    if(x>='a'&&x<='z')x=x-'a'+'A';
    return x;
}

int anfangsbuchstaben(char *s)
{
    anzahl;char erster;
    anzahl=0;erster=1;
    while(*s!='\0')
    {
        if(erster||((!erster)&&(*(s-1)==' ')))
        {
            *s=grossmachen(*s);
            anzahl++;
        }
        erster=0;
        s++;
    }
}
Ungetestet.

Gruß
 
Zuletzt bearbeitet:
Oh, mist Sorry. Das war die falsche Angabe :(. Tut mir leid für die Arbeit.

Die Fragen von Oben bleiben natürlich gleich und so.

Hier die Richtige Angabe:
Schreiben Sie zwei Unterprogramme:
a) Ein Unterprogramm um die Strichpunkte in einem String zu zaehlen.
Uebergabe: String / Rueckgabe: Anzahl

b) Ein Unterprogramm um die Reinen Zahlen in einem String zu Zaehlen die mit
Strichpunkten getrennt sind. Alle Grossbuchstaben des Strings sind in
Kleinbuchstaben zu wandeln.
Uebergabe: String / Rueckgabe: Anzahl der Zahlen

Das Hauptprogramm soll den String anlegen, die Unterprogramme aufrufen und
das Ergebnis ausgeben. Die Unterprogramme duerfen keine Ausgabe machen.

Beispiel:
454;Hubert ;Anna;2333

Ergebnis:
3 Strichpunkte
2 Zahlen
String:
454;HUBERT ;ANNA;2333

MfG C_Boy
 
Die printf´s im main zu ändern, um wieder von Strichpunkten und Zahlen zu reden, sollte kein Problem sein.
Die Funktion leerzeichen zu strichpunkte zu ändern auch nicht.

In der Zahlen-zählen-Funktion:
Alle Buchstaben durchgehen.

Einerseits in Großbuchstaben ändern, wenn sie Kleinbuchstaben sind (Beispiel kannst du bei meinem Code oben sehen).

Andererseits: Eine Variable istzahl, am Anfang auf 1, wenn der Buchstabe keine Ziffer ist wird sie auf 0 gesetzt.
Bei jedem Strichpunkt und Beim Stringende wieder auf eins setzen und eine Variable anzahl erhöhen.
anzahl muss am Anfang natürlich auf 0 gesetzt werden, am Schluss mit return zurückgeben.

Gruß
 
Zurück