Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Buchstaben zählen in C
Druckversion
Druckversion
Antworten
Antworten
Autor
Universität/Hochschule Buchstaben zählen in C
HartlPet
Junior Letzter Besuch: im letzten Quartal
Dabei seit: 24.11.2020
Mitteilungen: 16
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2020-11-30


Aufgabe:




Meine Lösung:



So weit bin ich bisher, er zählt die Buchstaben ohne Berücksichtigung der Leerzeichen jedoch zählt er , . und ! sowie andere Zahlen noch mit. Wie schaffe ich das er es nicht macht?

Danke im voraus



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
StrgAltEntf
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 19.01.2013
Mitteilungen: 6560
Herkunft: Milchstraße
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2020-11-30


Hallo HartlPet,

',' hat den logischen Wert TRUE. (So, wie alles, was nicht 0 ist.)

Du musst also schreiben
strng[i] != ' ' && strng[i] != ',' && strng[i] != '.' && strng[i] != '!' 
Was machst du übrigens wenn im String Ziffern oder andere Sonderzeichen vorkommen?




Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
HartlPet
Junior Letzter Besuch: im letzten Quartal
Dabei seit: 24.11.2020
Mitteilungen: 16
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, vom Themenstarter, eingetragen 2020-11-30


Vielen dank! Das weis ich noch nicht wie ich es mache, gibt es einen Weg ziffern zu Beschreiben? oder muss ich von 0-9 alle ziffern angeben



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
StrgAltEntf
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 19.01.2013
Mitteilungen: 6560
Herkunft: Milchstraße
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, eingetragen 2020-11-30


Anstatt alle Sonderzeichen und Ziffern abzuklappern, wäre es wohl sinnvoller, andersrum zu testen, ob es ein Buchstabe ist.

Beachte hierbei, dass die Buchstaben im ASCII-Code hintereinander stehen.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
HartlPet
Junior Letzter Besuch: im letzten Quartal
Dabei seit: 24.11.2020
Mitteilungen: 16
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, vom Themenstarter, eingetragen 2020-11-30




Vielen Dank!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
StrgAltEntf
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 19.01.2013
Mitteilungen: 6560
Herkunft: Milchstraße
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, eingetragen 2020-11-30


Ja, fast. Ich war oben etwas ungenau. Die Groß- und die Kleinbuchstaben stehen jeweils hintereinander. Aber dazwischen sind weitere Sonderzeichen.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
AlphaSigma
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 23.11.2012
Mitteilungen: 242
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, eingetragen 2020-11-30


Hallo HartlPet,

deine Zeile
C
  if (string[i] != ' ' && ',' && '.' && '!')
funktioniert nicht so wie du vielleicht denkst. Du muss jeweils separat auf Ungleichheit prüfen.
C
  if (string[i] != ' ' && string[i] != ',' && string[i] != '.' && string[i] != '!')
In C ist alles was ungleich 0 (Null) ist "true". D.h.
C
  if (string[i] != ' ' && ',')
ist äquivalent zu
C
  if (string[i] != ' ' && 1)
d.h. immer wahr, wenn string[i] != ' ' ist.

Deine Methode auf Ungleichheit von den Buchstaben zu prüfen hat den Nachteil, dass du alle Ausnahmen abdecken musst, also z.B. auch '?', '@', '#' und noch viel mehr. In den meisten Zeichensätzen sind die Buchstaben direkt aufeinanderfolgend angeordnet, d.h. mit
C
  char c;
  if (c >= 'a' && c <= 'z')
kannst du prüfen, ob c einer der Kleinbuchstaben ist. Dann musst du nur auf Groß- oder Kleinbuchstaben prüfen und hast automatisch alle anderen Sonderzeichen abgedeckt.

In der C Standardbibliothek gibt es auch die Funkion isalpha, die das macht. Aber ich denke ihr sollt selber eine Funktion schreiben und nicht eine aus der Standardbibliothek verwenden.







[Die Antwort wurde vor Beitrag No.1 begonnen.]



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
HartlPet
Junior Letzter Besuch: im letzten Quartal
Dabei seit: 24.11.2020
Mitteilungen: 16
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.7, vom Themenstarter, eingetragen 2020-11-30




Kann man das nicht so schreiben? Logischer Fehler schätze ich mal

[Die Antwort wurde nach Beitrag No.5 begonnen.]



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
StrgAltEntf
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 19.01.2013
Mitteilungen: 6560
Herkunft: Milchstraße
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.8, eingetragen 2020-11-30


2020-11-30 18:02 - HartlPet in Beitrag No. 7 schreibt:
Kann man das nicht so schreiben? Logischer Fehler schätze ich mal
Das ist wohl sogar korrekte C-Syntax, aber es liefert nicht das, was du möchtest.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
viertel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 04.03.2003
Mitteilungen: 27700
Herkunft: Hessen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.9, eingetragen 2020-11-30

\(\begingroup\)\(\newcommand\d{\mathop{}\!\mathrm{d}}\)
Hi HartlPet

„Umgangssprachlich“ schreibt man sowas: $a \le x \le b$
In einer Programmiersprache muß man jede Ungleichung separat schreiben und beide mit and verknüpfen:
C++
if ( a <= x  &&  x <= b)  // das x steht zwischen den Grenzen

Es macht m.M.n. Sinn (es ist leichter lesbar), wenn die Ungleichungskette beibehalten wird.
Bei dieser Schreibweise muß man immer umdenken:
C++
if ( x >= a  &&  x <= b)  // schlechter lesbar (finde ich)

Gruß vom ¼


-----------------
Bild
\(\endgroup\)


Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
HartlPet hat die Antworten auf ihre/seine Frage gesehen.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]