Prozedur zur Überprüfung eines Strings



  • Hallo,
    ich brauche für eine Aufgabe eine Prozedur die den String "datensatz" nach bestimmten Kriterien absucht und danach anzeigt ob es sich um einen korrekten Teil des Strings handelt oder nicht.
    Meine Überlegung sieht bisher so aus:

    void getpnumber (char datensatz[80], int *p_stelle, int *p_zaehler_zeile, int *p_ok)
    {
    	int i=0;
    	int x=0;
    	*p_ok=true;
    	i=*p_stelle;
    
    	while(datensatz[i] && datensatz[i]!='.')
    	{
    		if(isdigit(datensatz[i]==0))
    			*p_ok=false;
    		i++;
    
    	}
    	i++; /*Sttelle vom Punkt dazuzählen*/
    	while(datensatz[i] && datensatz[i]!=',')
    	{
    		if(isdigit(datensatz[i]==0))
    			*p_ok=false;
    
    		i++;
    		x++;
    	}
    	if(x>2)		/*DIGIT darf nur 2 mal vorkommen*/
    		*p_ok=false;
    	i++; /*Stelle vom Komma dazuzaehlen*/
    
    	*p_stelle=i;
    	return;
    

    Der Funktion werden diese Sachen übergeben:
    datensatz ist ein char der so aussieht: "2.34,2805,83,10.30,90"

    *p_stelle wird die Stelle im String übergeben( in diesem Fall 0)und soll wenn die Funktion beendet wird die aktuelle Stelle im String zurückgeben.

    *p_zaehler_zeile ist in diesem Fall auch 0

    und *p_ok hat den Wert 0 gleich false;

    Die Funktion soll nun den String bis zum ersten Komma abklappern und prüfen ob es is um eine double-Zahl(wird als pnumber bezeichnet) nach genau diesem Muster handelt:
    z.b. 2.34 oder 12.56 vor dem "." dürfen beliebig viele Ziffern kommen danach genau 2. Allen anderen Eingaben sind als falsch zu erkennen und die Funktion sollte ein false zurückgeben dass es sich um keine korrekte pnumber handelt.

    Bei meinem Versuch erkennt die Funktion zwar wenn pnumber z.b. "12.334" als falsch. Wenn ich jedoch ".23" eingabe wird ein true zurückgegeben obwohl das Format nicht korrekt ist.

    Ich hoffe ich hab die Lage einigermaßen verständlich dargelegt. Wo liegt mein Denkfehler. Häng leider schon ziemlich lang an dieser Stelle. Besten Dank für eure Hinweise schon im Voraus.

    Gruß Danjo



  • Danjo schrieb:

    Bei meinem Versuch erkennt die Funktion zwar wenn pnumber z.b. "12.334" als falsch. Wenn ich jedoch ".23" eingabe wird ein true zurückgegeben obwohl das Format nicht korrekt ist.

    wenn das das einzige problemm ist dann musste nur sicherstellen, dass das erste zeichen eine zahl ist.

    if (!isdigit (datensatz[0]))
    {
       *p_ok =false;
       return;
    }
    

    so ähnlich etwa



  • Da *p_stelle beim ersten Aufruf der Funktion 0 ist sollte doch eigentlich schon überprüft werden ob es an der stellte "datensatz[0]" eine Ziffer ist. Das versteh ich nicht so ganz. Außerdem brauch ich die Funktion später noch mal im String und ist das dann nicht mehr Stelle "0" sondern z.b. "9" oder "10".

    Gruß Danjo


Anmelden zum Antworten