auslesen: anzahl der ziffern?

ohio

Erfahrenes Mitglied
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.
 
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)
{
...
}
 
Original geschrieben von Ercan

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);

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

Code:
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.

Code:
int v = 15002;
if( (v / 10000) > 1 )  printf("mind. 5 Stellen!");
 
Meiner Meinung nach würde es gehen, wenn du die Zahl als string einliest, und dann jede einzelne Stelle auswertest

Code:
#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
 
Am einfachsten wird wohl eine einfache Verzweigung sein. Die Zahl als String einzulesen ist Performance-Verschwendung, sorry dass ich das so sage. ;)

Code:
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.
 
oder so:
Code:
#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;
}
 
@ 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
 
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
 
Zurück