Hey, ich wollte fragen, wie man in c eine zahl überprüfen kann, ob sie ein bestimmtes zeichen enthält: Zum Beispiel ob in der Zahl 134 die zahl 3 ist. Hat jemand eine Idee? Danke schonmal
Google mal nach strchr und itoa oder sprintf. Das löst Dein Problem. Du musst die "134" erst als string vorliegen haben und kannst dann mit strchr einzelne Zeichen abfragen. Grüsse, R.
Pat schrieb: > Hey, > ich wollte fragen, wie man in c eine zahl überprüfen kann, ob sie ein > bestimmtes zeichen enthält: > Zum Beispiel ob in der Zahl 134 die zahl 3 ist. > Hat jemand eine Idee? > Danke schonmal Oder die Stringmethoden komplett vergessen und die zu überprüfende Zahl in ein Array einzelner Ziffern zerlegen. Dann auf herkömmliche Weise das Array überprüfen. Oder auch das Array vergessen und die Überprüfung während des Zerlegens 'on the fly' machen.
Norbert schrieb: > Oder die Stringmethoden komplett vergessen und die zu überprüfende Zahl > in ein Array einzelner Ziffern zerlegen. was zum Schluss das gleiche wie ein String ist. Nur mit einem Offset.
Norbert schrieb: > Oder die Stringmethoden komplett vergessen und die zu überprüfende Zahl > in ein Array einzelner Ziffern zerlegen. Also genau das, was itoa macht. > Dann auf herkömmliche Weise das Array überprüfen. Also genau das, was strchr macht. Wo ist jetzt der Vorteil, das selbst zu machen? > Oder auch das Array vergessen und die Überprüfung während des Zerlegens > 'on the fly' machen. So könnte man sich dann immerhin mal den Speicher für das Array sparen, was aber auf dem PC nun wirklich keine Rolle spielt.
@Peter @Rolf Magnus Das sollte eigentlich eine sanfte Hinführung auf die zuletzt genannte Methode sein um zu verstehen wie man so eine Aufgabe lösen kann. Kam wohl nicht so rüber. Mein Fehler ;-) Im Übrigen würde aber itoa noch eine Translation zB. von Dez 1 auf Hex 31, Dez 2 auf Hex 32, usw. machen. (int to char) Der Vorteil wäre ua., das man den Suchvorgang abbrechen könnte sobald eine Ziffer gefunden würde.
Hallo Norbert Um zu verstehen (vor allem etwas Speicherdenken zu verstehen, was mitunter heutzutage untergeht) ist Dein Ansatz meiner Meinung nach richtig. Wie ich itoa oder ähnliches nicht gekannt hatte, ging ich diesen Umweg. Aber ich denke, dass der/die TO nicht diesen Weg suchte. Wenn aber doch, ist es ein guter Hinweis gewesen. Grüsse, R.
Norbert schrieb: > Oder auch das Array vergessen und die Überprüfung während des Zerlegens > 'on the fly' machen. Wenn keine Fehler drinnen sind, dann z.B. so: Prüfe aber nur ob eine bestimmte Ziffer vorhanden ist. Auf eine Zahl prüfen würde ähnlich gehen.
1 | #include <stdio.h> |
2 | |
3 | int main(int argc, const char * argv[]) |
4 | {
|
5 | |
6 | long long zahl = 1234567891233456789; |
7 | char ziffer = 3; |
8 | int zaehler = 0; |
9 | |
10 | while (zahl != 0) { |
11 | char c = zahl % 10; |
12 | if (c == ziffer) { |
13 | ++zaehler; |
14 | }
|
15 | |
16 | zahl /= 10; |
17 | }
|
18 | |
19 | printf("%d mal gefuden\n", zaehler); |
20 | |
21 | return 0; |
22 | }
|
Die String-Methoden vergessen und das Problem arithmetisch lösen scheint am einfachsten, wenn die Zahl als Integer vorliegt oder Konvertieren. Also in einer Schleife wiederholt durch 10 teilen und jeweils den Rest prüfen ob er 3 ergibt. Dann einfach abbrechen oder durchzählen wie oft die 3 vorkommt, ist das grösser als Null kommt die 3 vor.
Willst Du eine echte, dezimale Drei erkennen, so musst Du die Zahl auch als echte ASCII-Dezimalzahl vorliegen haben. In den meisten Fällen sind hierbei die "eingebauten" Funktionen am schnellsten und kompaktesten. z.B. itoa() und strchr(). Ganz anders sieht es aus, wenn Du Zahlen suchst, in die die Drei hineinpasst. Also 6, 9 oder 111.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.