Forum: PC-Programmierung Zahl überprüfen


von Pat (Gast)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

Pat schrieb:
> Hat jemand eine Idee?

in text (char*) umwandeln und dann darin suchen?

von Joe S. (bubblejoe)


Lesenswert?

Die relevanten Bits sich raussuchen und überprüfen?

von Rene H. (Gast)


Lesenswert?

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.

von Norbert (Gast)


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.

von Peter II (Gast)


Lesenswert?

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.

von Rolf M. (rmagnus)


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.

von Norbert (Gast)


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.

von Rene H. (Gast)


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.

von mar IO (Gast)


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
}

von Hubert (Gast)


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.

von amateur (Gast)


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.

von mar IO (Gast)


Lesenswert?

Wie liegt denn die Zahl vor?
- Int: 12345
- Float: 12.34
- String: "12345"

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
Noch kein Account? Hier anmelden.