String in Int Array?

Also hier in diesem Beispiel kann ich auf jede Ziffer der Zahl zugreifen und damit rechnen. (Hier kann ich eine Prüfziffer einer Paketnummer von GLS berechnen.)

PHP:
<!DOCTYPE html>
<html>
  <head>
    <title>Seitentitel</title>
    <meta charset='utf-8'>
    <link rel="stylesheet" href="style.css">
  </head>
  <body>
    <form action="pnummer.php" method="post">
        <b>Paketnummer</b>: <br>
        <input type="text" name="pnummer" maxlength="11" />
        <input type="submit" value="Berechnen" name="berechnen" />
    </form>
<?php

   if (isset($_POST["pnummer"])) { // Überpürfen ob das Formular abgeschickt wurde um Fehlermeldung abzufangen.
       $PN = $_POST["pnummer"]; // Hier wird die Paketnummer in die Variable $PN gespeichert.

       // Hier werden die Berechnungen der einzelnen Ziffern erledigt.
       $zahl1 = $PN[0] * 3;
       $zahl2 = $PN[1] * 1;
       $zahl3 = $PN[2] * 3;
       $zahl4 = $PN[3] * 1;
       $zahl5 = $PN[4] * 3;
       $zahl6 = $PN[5] * 1;
       $zahl7 = $PN[6] * 3;
       $zahl8 = $PN[7] * 1;
       $zahl9 = $PN[8] * 3;
       $zahl10 = $PN[9] * 1;
       $zahl11 = $PN[10] * 3;

       $berechnung1 = $zahl1+$zahl2+$zahl3+$zahl4+$zahl5+$zahl6+$zahl7+$zahl8+$zahl9+$zahl10+$zahl11;
       $zErgebnis1 = $berechnung1 / 10;
       // Eventuell noch eine Abfrage einbauen wo geprüft wird ob es wirklich eine Nachkommastelle gibt.
       $zErgebnis2 = (int)(substr($zErgebnis1,2)); // Nur die Nachkommastelle als Ganzzahl benutzen zb aus 0.1 -> 1 machen.
       $zErgebnis3 = $zErgebnis2 - 10;
       // Eventuell noch eine Abfrage einbauen in der überprüft wird ob es wirklich eine Negative Zahl ist (if $zahl <0 ....
       $ergebnis1 = abs($zErgebnis3); // Negative Zahlen in Positive umwandeln zb -12 in 12
       $final = $ergebnis1 - 1;

       echo "<br>";
       echo "<b>Die Paketnummer mit Prüfziffer lautet:</b><br>";
       echo "$PN<b>$final</b>";

       // echo $zErgebnis4; // Ausgabe.

   }

?>

  </body>
</html>

Ist bestimmt nicht der schönste Code und man könnte es vielleicht besser machen aber er funktioniert. :-)
Und da kann ich halt sehr einfach auf die einzelnen Ziffern zugreifen.
 
aber sowas wie
C#:
myString = "1234567890";
int zahl1 = Convert.ToInt32( myString[0] ) * 3;
int zahl2 = Convert.ToInt32( myString[1] ) * 1;
......
sollte doch gehen, wenn ich das richtig verstehe ... :mad:

Gruß
Klaus
 
Wenn ich aber folgendes mache:
Code:
           string myString = tbNummer.Text;
           
            int zahl1 = Convert.ToInt32(myString[0]) * 3;
           
            string ergebnis = Convert.ToString(zahl1);

            lblPruefziffer.Text = ergebnis;
Und zb eine 5 eingebe in die Textbox und es berechnen lasse, bekomme ich das Ergebnis 159 raus. Kann ja nicht stimmen, müsste dann ja 15 sein oder?

MlG
 
So nun aber?

Code:
            string zahl = "285456";

            int i = 0;
        
            List<int> numern = new List<int>();

            if (Int32.TryParse(zahl, out i))
            {
                while (i > 0)
                {
                    numern.Add(i % 10);
                    i = i / 10;
                }
                numern.Reverse();

// mit loop add to list
                List<int> values = new List<int>();
                bool istdrei = true;
                foreach (var item in numern)
                {
                    if (istdrei)
                    {
                        values.Add(item * 3);
                        istdrei = false;
                    }
                    else
                    {
                        values.Add(item * 1);
                        istdrei = true;
                    }
                }

int sume = (from x in values select x).Sum();// summe aller werte in der lieste values

//oder
//ohne loop in einzelne int's
                int zahl1 = numern[0] * 3;
                int zahl2 = numern[1] * 1;
                int zahl3 = numern[2] * 3;
                int zahl4 = numern[3] * 1;
                int zahl5 = numern[4] * 3;
                int zahl6 = numern[5] * 1;

              //  sume = zahl1 + zahl2 + ....
            }
            else
            {
                // es ist kein Zahl
            }
        }
 
Zuletzt bearbeitet:
da string implizit char arrays sind könntest du auch die einzelen zeichen direkt durchlaufen

Code:
foreach(char c in meinString)
{
   if(c<'0' || c>'9') //Prüfung das nur numerische Zeichen im string
         throw new Exception("Kein numerischen zeichen");

   //beim casten von char nach int wird der Ascii Wert des zeichens zurückgegeben
   int nr=(int)c - 48; //48 ist der Ascii Wert für 0, diesen abziehen um auf den original zahlen wert zu kommen
}


Edit: wegen demm Ascii Wert komsmt du oben auf 159.
 
Wenn ich aber folgendes mache:
Code:
           string myString = tbNummer.Text;
          
            int zahl1 = Convert.ToInt32(myString[0]) * 3;
          
            string ergebnis = Convert.ToString(zahl1);

            lblPruefziffer.Text = ergebnis;
Und zb eine 5 eingebe in die Textbox und es berechnen lasse, bekomme ich das Ergebnis 159 raus. Kann ja nicht stimmen, müsste dann ja 15 sein oder?

MlG
Doch grundsätzlich ist auch 159 schon richtig.
Augenscheinlich wird hier aber mit dem Decimal-Wert des ASCII-Zeichens '5' - das ist dann '53' (oder 0x35 ;)) gerechnet.
Sorry, das war mir nicht klar :rolleyes:

Gruß
Klaus
 
Aslso bei mir sieht das ganze nun so aus:
C++:
        private void btnBerechnen_Click(object sender, EventArgs e)
        {

            string zahl = tbNummer.Text;

            int i = 0;

            List<int> numern = new List<int>();

            if (Int32.TryParse(zahl, out i))
            {
                while (i > 0)
                {
                    numern.Add(i % 10);
                    i = i / 10;
                }
                numern.Reverse();

                //mit loop add to list
                List<int> values = new List<int>();
                bool istdrei = true;
                foreach (var item in numern)
                {
                    if (istdrei)
                    {
                        values.Add(item * 3);
                        istdrei = false;
                    }
                    else
                    {
                        values.Add(item * 1);
                        istdrei = true;
                    }
                }
                //oder
                //ohne loop in einzelne int's
                int zahl1 = numern[0] * 3;
                int zahl2 = numern[1] * 1;
                int zahl3 = numern[2] * 3;
                int zahl4 = numern[3] * 1;
                int zahl5 = numern[4] * 3;
                int zahl6 = numern[5] * 1;
            }
            else
            {
                // es ist kein Zahl
            }

            lblPruefziffer.Text = Convert.ToString(zahl1);
Nun sagt er mir allerdings "Der Name "zahl1" ist im aktuellen Kontext nicht vorhanden.". Vielleicht bin ich auch gerade argh verwirrt und seh den Fehler einfach nicht. :-/
 
Deine variable heißt zahl nicht zahl1.
Du versuchst am schluss auf zahl1 zuzugreifen welches bei dir nicht existiert.

Nachtrag:
Zumindest existiert zahl1 nicht im äußerem Block.

Angaben im Code mit { } kann man als eigene Blöcke sehen, die können von außen variablen annehmen aber ihre nicht nach außen geben.
 
Zurück