String



  • hmm nur wie bekomme ich das probelm gelöst ich muss eine kreditkartenprüfung programmieren und als erstes wird geprüft ob die länge zwischen 13 und 16 liegt das mach ich über strlen weshalb ich ein string initialisiert habe und nu soll jede gerade stelle mit 2 multipliziert werden .



  • Aber Dir muss doch klar sein, dass karte[i] nicht '10' (bei ursprünglich karte[i] = '5') werden kann, denn in karte[i] passt nun mal nur ein Zeichen.



  • ich möchte ja nicht die stellenanzahl durch die Multiplikation erhöhen sondern einfach nur das zeichen an der stelle, in diesem fall möchte ich aus 2 durch Multiplikation 4 machen . bei der Addition funktioniert es ja nur nicht bei der Multiplikation da kommen entwerder Buchstaben oder komische zeichen raus .



  • Ist Dir klar, warum es bei der Addition funktioniert und bei der Multiplikation nicht??



  • ehrlich gesagt nicht ! ?



  • Ja, aus 2 wird 4, das Zeichen '2' kannst Du dann durch das Zeichen '4' ersetzen - warum auch immer Du das willst.

    Aber aus 5 wird durch Multiplikation mit 2 10. Und wodurch möchtest Du dann das Zeichen '5' ersetzen? Durch '10'? Das sind aber zwei Zeichen und geht deshalb nicht ...

    Bei der Addition wirst Du dasselbe Problem haben, sobald das Additionsergebnis größer als 9 ist.



  • na bei Multiplikation arbeitet er mekrwürdiger weise mit der stelle im char Alphabet und bei der Addition mit dem vorgegebenen wert oder so



  • Nö!
    '2' ist gleich 50.
    Wenn Du da 2 draufaddierst, ist das 52. Das wiederum ist gleich '4'.
    Wenn Du es aber mit 2 multiplizierst, sind das 100. Und das ist gleich 'd'.



  • 1.1 Plausibilitätsüberprüfung von Kreditkarten
    Zur Prüfung der formellen Richtigkeit von Ziffernfolgen z.Bsp. Auf Kreditkarten kommt ein
    Algorithmus von „Luhn“ zum Einsatz.
    Ablauf der Prüfung:
    Schritt 1: Verdoppeln Sie den Wert jeder geraden Stelle, beginnen Sie von rechts.
    Schritt 2: Ergibt das Produkt einen Wert größer 9 (Bsp. Ziffer ist 9 mal 2 = 18), dann
    addieren Sie die Ziffern (Bsp. aus 18 wird1+8 =9) zu einem neuen Wert.
    Schritt 3: Die Kartennummer ist plausibel, wenn die Quersumme aller neuen Ziffernwerte
    10,20,30,40,50,….. ergibt!
    Beispiel : gegebene Kreditkartennummer: 49927398716:
    Schritt 2: 4 +(1+8)+ 9 + (4) + 7 + (6) + 9 +(1+6) + 7 + (2) + 6
    Schritt 3: Sum = 70 : Kartennummer ist gültig!
    das ist meine aufgabe vielleicht ist es so besser zuverstehen was ich meine



  • Ich frag mal anders:
    Dein Eingabestring sei "3456".
    Nun möchtest Du jede Stelle mit 2 multiplizieren und das Ergebnis wieder zurück in den String schreiben. Wie soll Dein Ergebnisstring denn dann aussehen?



  • Aha ... dann also zum Beispiel so:

    int ziffer;
    int zwi;
    ziffer = karte[i] - '0';
    zwi = ziffer * 2;
    if(zwi > 9)
      ziffer = 1 + zwi % 10;
    karte[i] = ziffer + '0';
    


  • 38512 hmmmm jap das haut aber irgenwie nicht hin wa 🙂



  • Eben, dann wird Dein String ja länger, deshalb siehe mein letztes Codebeispiel, da wird dann nur die Quersumme zurück in den String geschrieben.

    Aber:
    Warum willst Du das Zwischenergebnis überhaupt in den String zurückschreiben, das ist doch gar nicht nötig?!



  • ja und dann gilt allerdings für jeden einzelnen Kreditkarte typ ein prefix und entsprechenede länge das bei der ausgabe der Name der Kreditkarte da steht zb:

    visa perfix:4 länge: 16 oder 13



  • und da alle Kreditkarten typen zwischen 13 und 16 liegen erfolgt die abfrage ob die eingegebende länge dazwischen liegt.



  • Beispiel (ungetestet):

    char nr[] = "49927398716";
    int i;
    int sum = 0;
    int doppelt = 0;
    int zwi;
    
    for(i = strlen(nr); i; )
    {
      --i;
      zwi = nr[i] - '0';
    
      if(doppelt)
      {
        zwi = zwi * 2;
        if(zwi > 9)
        {
          sum += 1;
          zwi %= zwi;
        }
      }
      sum += zwi;
      doppelt = !doppelt;
    }
    
    printf("sum = %d\n", sum);
    


  • Belli hast du whatsapp oder so,da ich die nächsten tage jetzt fürs Studium noch 3 weitere Programme programmieren muss, würde ich es ganz cool finden wenn du mir, wenn fragen aufkommen sollten helfen könntest 🙂 meine mail aderesse: focusscherz@web.de falls du whatsapp hast und mir deine nummer geben würdest oder ich gebe dir meine.



  • char nr[] = "49927398716";
    


  • Hallo kscherz,

    in der Aufgabe steht doch gar nicht drin, daß du einen neuen String erzeugen sollst, sondern du sollst einfach die Summe bilden (d.h. dieser ganze Thread hier ist völlig unnötig)!



  • hab ich auch gar nicht behauptet das ein neuer string erzeugt werden muss. allerdings wird ein string verwendet und nen kumpel von mir hat die aufgabe mit 2 strings gelöst ,kann ich auch gleich reinstellen die lösung von ihm:


Anmelden zum Antworten