String



  • ich würde gerne die einzelnen stellen meiner eingegebenen Zahl mit 2 addieren zb: eingabe: 2222222 Aktion: 2*2, 2*2,...... Ausgabe:4444444 allerdings kommen bei meiner ausgabe immer Buchstaben raus. Meine Programmierung:

    for(i=0;i<strlen(karte);i++){
    karte[i]=karte[i]*2;
    }
    printf("%s",karte);



  • multiplizieren meine ich



  • karte[i]=((karte[i] - '0') *2) + '0';

    geht aber nur, solange in der Eingabe nichts > 4 vorkommt ...



  • Ich würd mal sagen das liegt daran, das 2 als Char 50 ist... wenn du das mal 2 nimmst, kommt 100 raus, also 'd'...



  • hmmm und was ist wenn die eingaben größer 4 sind meine eingaben müssen zwischen 0 und 9 liegen



  • 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.


Anmelden zum Antworten