# auslesen: anzahl der ziffern?



## ohio (26. März 2002)

guden,

kleine frage:

mit welcher func kann ich die anzahl der ziffern die in einer var vorhanden sind auslesen, also sprich:

//5 Ziffern
$var = "hossa";

wie immer, danke für jede antwort.


----------



## AKM<2b> (26. März 2002)

mit ...

strlen(string str)

sind das Ziffern ????

2b


----------



## Ercan (31. Mai 2004)

Und wie funktioniert das ganze mit Zahlen?

#include <stdio.h>
#include <stdlib.h>

int quersumme(unsigned int zahl, unsigned int ziffern);

int main(void)
{
   unsigned int summe,ziffern, zahl

   printf("Geben Sie eine Zahl ein: ");
   scanf ("%i", &zahl);

   ziffern = strlen(zahl);   HIER MACHT ER MIR PROBLEME 

   summe = quersumme(zahl,ziffern);

   printf("Quersumme von %i = %i\n",zahl, summe);

   system("pause");
   return 0;
}

int quersumme(unsigned int zahl, unsigned int ziffern)
{
...
}


----------



## ronin (1. Juni 2004)

HIER -> PHP
WOANDERS -> C++

ich glaub, 4 foren tiefer als php


----------



## Lampe (1. Juni 2004)

> _Original geschrieben von Ercan _
> *
> unsigned int summe,ziffern, zahl
> 
> ...



Das ist lustig, was du da versuchst! Echt.... das wäre was für http://www.bash.org
(strlen = Stringlänge) != Zahl


```
BEZEICHNUNG
       strlen - berechnet die Länge einer Zeichenkette

ÜBERSICHT
       #include <string.h>

       size_t strlen(const char *s);

BESCHREIBUNG
       Die  Funktion  strlen()  berechnet  die  Länge  der  Zeichenkette s und
       berücksichtigt dabei nicht das Zeichen ‘\0’.

RÜCKGABEWERT
       Die Funktion strlen() liefert die Anzahl der Buchstaben der Zeichenket-
       ten s zurück.

KONFORM ZU
       SVID 3, POSIX, BSD 4.3, ISO 9899

SIEHE AUCH
       string(3)
```

Da wir wissen das int nur ca. 64k verschiedene Zustände anzeigen kann. Kann man doch einfach eine Division machen.


```
int v = 15002;
if( (v / 10000) > 1 )  printf("mind. 5 Stellen!");
```


----------



## abcd_hallo (7. Juni 2004)

Meiner Meinung nach würde es gehen, wenn du die Zahl als string einliest, und dann jede einzelne Stelle auswertest


```
#include <stdio.h>


int main (int argc, char *argv[])
{
	char szDieZahl[128], szHilfszahl[128];
	int nSumme=0, nHilf=0, i=0;
	printf("Geben Sie die zahl ein: ");
	gets(szDieZahl);

	while (szDieZahl[i] != '\0')
	{
		 sprintf(szHilfszahl, "%c", szDieZahl[i]);
		 sscanf(szHilfszahl, "%d", &nHilf);
		 nSumme += nHilf;
		 i++;
	}

	printf("\n\nQuersumme von %s = %d\n", szDieZahl, nSumme);

	return 0;
}
```

So sollte es klappen. Bitte schön


----------



## Dario Linsky (7. Juni 2004)

Am einfachsten wird wohl eine einfache Verzweigung sein. Die Zahl als String einzulesen ist Performance-Verschwendung, sorry dass ich das so sage. 


```
if (zahl < 10) { printf("1 Stelle"); }
else if (zahl < 100) { printf("2 Stellen"); }
else if (zahl < 1000) { printf("3 Stellen"); }
else if (zahl < 10000) { printf("4 Stellen"); }
else if (zahl < 100000) { printf("5 Stellen"); }
```

Scheint mir das kürzeste und eigentlich auch naheliegendste zu sein.


----------



## frager (7. Juni 2004)

oder so:

```
#include <iostream>

using namespace std;

int main(int argc, char **argv)
{
	int zahl = 123456;
	int stellen = 1;

	cout << "Zahl:\t" << zahl << endl;
	while(zahl /= 10)
		stellen++;
	cout << "Stellen:\t" << stellen << endl;

	return 0;
}
```


----------



## abcd_hallo (7. Juni 2004)

@ Dario Linsky: Mit der Performance hast du natürlich recht.

Dachte es ginge um die Berechnung der Quersumme, und nicht nur um die Anzahl der Stellen, sorry


----------



## Daniel Toplak (8. Juni 2004)

> Die Zahl als String einzulesen ist Performance-Verschwendung, sorry dass ich das so sage.


Na aber bitte und was ist mit Sicherheit?
Was passiert, wenn hier so ein Idiot ein Buchstaben eingibt?
Naja also da würde ich doch auf Performance verzichten und doch eher als String einlesen.
Und dann umwandeln.

Gruß Homer


----------



## Dario Linsky (8. Juni 2004)

> Na aber bitte und was ist mit Sicherheit?
> Was passiert, wenn hier so ein Idiot ein Buchstaben eingibt?




```
try ... catch
```
Würd ich jedenfalls in Java so machen.


----------

