Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Wörter zählen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
26.09.2008, 17:54 Uhr
~halloooooo
Gast


Hallo

Ich habe ein Programm geschrieben welches Wörter zählt. Das Problem ist jetzt wenn ich zuerst Leerzeichen drücke auch um 1 hochzählt. Wie könnte ich das umschreiben, da fehlt mir der Ansatz.



C++:
int zählen(char zeichen)
{
    static int a=0;

    if(zeichen==32)
    {
        a++;
        
        return a;
    }

}



Danke
MfG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.09.2008, 19:05 Uhr
TOSHMAX



Ich schätze mal das du die Positionen der Zeichen einzeln abfrägst, wobei du die Positionen erhältst. Du musst also nur die Zeichen zählen und wenn das 1. Zeichen(Position 0) ein Leerzeichen ist einfach nicht mitzählen lassen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.09.2008, 19:10 Uhr
~halloooooo
Gast


Falls du Array meinst, damit arbeite ich nicht, das ist das Problem.

Ich gebe mit getchar zeichen ein bis Enter gedrückt wird und bei jedem eingegeben Zeichen springt er in die Schleife ob ein Leerzeichen kommt.

Das Problem ist jetzt wenn ich zuerst ein Leerzeichen oder mehrere hintereinander eingebe. zählt er die auch automatisch mit als wörter.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
26.09.2008, 19:13 Uhr
CppProgrammer



Du könntest das vorherige Zeichen auch immer mit abspeichern, und dann nur erhöhen wenn das aktuelle Zeichen ein Leerzeichen ist, aber das vorherige keines ist.
Dieser Post wurde am 26.09.2008 um 19:14 Uhr von CppProgrammer editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.09.2008, 02:01 Uhr
Hans
Library Walker
(Operator)


Hi,

Zitat von ~halloooooo:
Falls du Array meinst, damit arbeite ich nicht, das ist das Problem.

das ist kein Problem.


Zitat:
Ich gebe mit getchar zeichen ein bis Enter gedrückt wird und bei jedem eingegeben Zeichen springt er in die Schleife ob ein Leerzeichen kommt.

Also: der springt nicht in eine Schleife, sondern in eine Funktion, und in dieser Funktion liegt auch der Fehler.


Zitat:
Das Problem ist jetzt wenn ich zuerst ein Leerzeichen oder mehrere hintereinander eingebe. zählt er die auch automatisch mit als wörter.


Natürlich. Du zählst ja auch keine Wörter, sondern Trennzeichen, d.h. Leerzeichen. Wenn Du zwischen zwei Wörtern mal mehr als ein Leerzeichen eingibst, wird Dir das Programm auch mehr "Wörter" angeben, als da stehen. Um wirklich Wörter zu zählen, musst Du schon testen, ob ein eingegebenes Zeichen ein Buchstabe ist, oder nicht. Erst wenn keine Buchstaben mehr kommen, kannst Du die Variable um eins erhöhen, die die Wörter zählt.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.09.2008, 13:05 Uhr
~halloooooo
Gast


Habe es jetzt auf diese Art probiert aber funktioniert auch nicht wirklich.


int zählen (char zeichen)
{
static int a=0;
static char letzter_B;


if(zeichen==32 && letzter_B!=32)
{
letzter_B = zeichen;
a++;
return a;
}

}

Was ist hier der Fehler
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
27.09.2008, 13:45 Uhr
ao

(Operator)


Spontan und ohne Test:

Die Zuweisung letzter_B = zeichen; und das return-statement dürfen nicht im if-Teil stehen, sondern dahinter.

Welches Return wird überhaupt ausgeführt, wenn die if-Bedingung nicht erfüllt ist?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
27.09.2008, 15:37 Uhr
~halloooooo
Gast


Hast recht. Habe ich ausgebessert.

Danke

Was meinst du mit welches Return wird ausgeführt, wenn die if-Bedingung nicht erfüllt ist.

Es zählt die Leerzeichen nicht mehr als Wörter doppelt.

Das letzte was ich noch lösen muss ist, wenn mein erster Buchstabe ein Leerzeichen ist dann wird das noch dazuaddiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
27.09.2008, 17:12 Uhr
Tommix




Zitat von ~halloooooo:

Das letzte was ich noch lösen muss ist, wenn mein erster Buchstabe ein Leerzeichen ist dann wird das noch dazuaddiert.

Dafür mußt Du letzter_B nur richtig initialisieren.
- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
27.09.2008, 17:33 Uhr
~halloooooo
Gast


Ich habe mein Programm erweitert dass er prüfen soll ob Leerzeichen oder 1 gedrückt wird. Wenn ja soll er nicht um 1 hochzählen.

Das Problem ist jetzt dass ich nicht schreiben kann.


C++:
static int a==32 || b==49;


Deshalb brauch ich eine andere Lösung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: