Mehrfachaddition



  • Guten Abend Community,
    ich hätte eine Frage bezüglich meiner Aufgabe. Das Programm soll eine Eingabe wie z.B. "3+6+7+4" oder "3+4+214+523+6" zulassen und ein Ergebnis ausgeben. Ich dachte man könnte da mit einer for-Schleife ran. Da ich aber noch nicht ganz dahinter gekommen bin, könnte mir jemand vielleicht einen Denkanstoß geben? 😕
    Mfg Andreas.



  • BlackPeace schrieb:

    Guten Abend Community,
    ich hätte eine Frage bezüglich meiner Aufgabe. Das Programm soll eine Eingabe wie z.B. "3+6+7+4" oder "3+4+214+523+6" zulassen und ein Ergebnis ausgeben. Ich dachte man könnte da mit einer for-Schleife ran. Da ich aber noch nicht ganz dahinter gekommen bin, könnte mir jemand vielleicht einen Denkanstoß geben? 😕
    Mfg Andreas.

    Das kann man auf viele verschiedene Arten lösen.

    Pseudo-Code:

    int result = 0;
    string buf;
    for (int i = 0; i < str.length(); ++i)
    {
     if (str[i] == '+')
     {
      result += System.Convert.ToInt32(buf);
      buf = "";
     }
     else
     {
      buf += str[i];
     }
    }
    


  • Ahh, das nimmt natürlich die letzte Zahl nicht mit...

    Schau dir das mal an:
    http://dotnetperls.com/string-split



  • ..... schrieb:

    Ahh, das nimmt natürlich die letzte Zahl nicht mit...

    Sollte gehen wenn man "i <= str.length" schreibt.


  • Administrator

    FreakY<3Cpp schrieb:

    ..... schrieb:

    Ahh, das nimmt natürlich die letzte Zahl nicht mit...

    Sollte gehen wenn man "i <= str.length" schreibt.

    Dann bekommst du aber eine IndexOutOfRangeException bei str[i] 😉

    Ich denke auch, dass es am einfachsten ist, ein String.Split auszuführen mit '+' . Danach auf alle Elemente ein String.Trim ausführen, als nächtes Double.Parse mit dem Element aufrufen und das ganze einer Gesamtsumme dazurechnen.

    Grüssli



  • Realisierung über string[] bla = Console.ReadLine().Split(...) sollte möglich sein. Dann foreach(string blub in bla) benutzen und nach Konvertierung (mit int.Parse(blub) addieren. Damit umgehst du dir die for-Schleife und hast zusätzlich noch echt .Net benutzt.



  • Hier mal pseudo wie die Lösung wäre (Genau wie die anderen es meinen)

    string text = "3+4+214+523+6";
    
    string[] numbers = text.Split(new char[] { '+' }, StringSplitOptions.RemoveEmptyEntries);
    int summary = 0;
    foreach (string number in numbers)
    {
        int value = 0;
        if (int.TryParse(number, out value))
        {
            summary += value;
        }
    }
    

    Wichtig ist, kein blankes "Parse", man sollte vorher überprüfen ob eine Konvertierung klappt.
    Im falle von double Werten sollte noch die Culture mit angegeben werden.


  • Administrator

    CSL schrieb:

    Wichtig ist, kein blankes "Parse", man sollte vorher überprüfen ob eine Konvertierung klappt.
    Im falle von double Werten sollte noch die Culture mit angegeben werden.

    Wieso? Damit eliminierst du jegliche Fehler, was ich nicht gerade für sinnvoll halte. Nun kann man auch sowas eingeben und es gibt ein korrektes Resultat aus:
    "sef+++sf+es+efs+++esf+es+es+fes+fes+fes++ef+5" → Resultat: 5

    Oder auch das geht:
    "Ich bin ein Text, den niemand kontrolliert und deswegen habe ich ein korrektes Resultat! Ist das nicht toll?" → Resultat: 0

    Ich würde auch auf die StringSplitOptions.RemoveEmptyEntries verzichten. Man soll Fehler schliesslich nicht schlucken, sondern behandeln 😉

    Grüssli


Anmelden zum Antworten