Zahl überprüfen

Gast #3149042
Lesenswert?

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.
#3149050
Lesenswert?

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.
Gast #3149061
Lesenswert?

@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.
Gast #3149088
Lesenswert?

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.
Gast #3149134
Lesenswert?

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
}
Gast #3149137
Lesenswert?

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.
Gast #3149150
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren