char to int in C und/oder Java

Dieses Thema im Forum "Mac OS Entwickler, Programmierer" wurde erstellt von CapFuture, 26.11.2004.

  1. CapFuture

    CapFuture Thread Starter MacUser Mitglied

    Beiträge:
    1.779
    Zustimmungen:
    1
    Mitglied seit:
    23.01.2004
    Moin allerseits :)

    Entweder bin ich dumm oder ich weiß nicht mehr weiter.

    Problem(Sprachunabhängig): Hab eine Zahlenfolge als String eingelesen und erfolgreich einer Methode/Prozedur übergeben. Will jetzt einzelne characters daraus rausnehmen(konvertieren in Int) und sie mit einigen mathematischen Operatoren bearbeiten.

    Problem(C): Ich hab den Char-Array übergeben, funktioniert prima. Auch strlen() gibt mir die länge des Strings an. Aber atoi(c) will net. Meckert ständig wegen fehlenden cast. Hab schon ein (int) vornedran geschmissen, hat aber nicht geholfen.

    Problem(Java): String erfolgreich mit nem Bufferreader eingelesen. Mit chatAt(i) bekomm ich auch mein Zeichen. Aber ich kann das verdammte Zeichen nicht in ein int konvertieren...

    Wäre nett wenn einer eine methode kennen würde... sonst muss ich (bedepperte) Methode schreiben und alle 10 Fälle abklappern...
     
  2. mithandir

    mithandir MacUser Mitglied

    Beiträge:
    54
    Zustimmungen:
    1
    Mitglied seit:
    19.10.2004
    Java: Integer.parseInt("<string"> da muss nix mit BufferedReader oder sowas
     
  3. CapFuture

    CapFuture Thread Starter MacUser Mitglied

    Beiträge:
    1.779
    Zustimmungen:
    1
    Mitglied seit:
    23.01.2004
    Habs schon probiert. Aber wie du ja selbst schreibst: Das Ding konvertiert einen STRING(!!!) in nen int. Bei char klappt das nicht... hab ich schon getestet... argh...
     
  4. oja, geht schon!

    Integer.parseInt(""+bla.charAt(i));

    lg, stessi!
     
  5. und wegen C Code, bitte gib mal deinen Code an, dann lässt sich der Fehler leichter finden, müsst nämlich so gehen und geht bei mir auch so.

    lg, stessi!
     
  6. CapFuture

    CapFuture Thread Starter MacUser Mitglied

    Beiträge:
    1.779
    Zustimmungen:
    1
    Mitglied seit:
    23.01.2004
    Naja hab das problem in c zwar schon mit ner holzhammermethode gelöst, aber ich will gern wissen ob's besser geht...

    Code:
    int nachDezimal(char value[], int base){
      int length = strlen(value);
      int ergebnis = 0;
      int i;
      for(i=length-1;i>=0;i--){
        int val = atoi(value[i]); // Hier passiert der mist
        //warning: passing arg 1 of `atoi' makes pointer from integer without a cast
        if(val>=base){
          return -1;
        }
        ergebnis+=val*power(base,i);
      }
      return ergebnis;
    }
     
  7. current

    current MacUser Mitglied

    Beiträge:
    64
    Zustimmungen:
    1
    Mitglied seit:
    02.10.2004
    in Java sollte so etwas gehen:

    Code:
    String zahl = "12345";
    
    for (int i = 0; i < zahl.length(); i++) {
        int ziffer = (int) (zahl.charAt(i) - '0');
        machIrgendwas(ziffer);
    }
    
     
  8. CapFuture

    CapFuture Thread Starter MacUser Mitglied

    Beiträge:
    1.779
    Zustimmungen:
    1
    Mitglied seit:
    23.01.2004
    Hmm, wie ich's mir gedacht habe... Differenz der Unicodes nehmen... naja merk ich mir für's nächste Javaprogramm. Thx :)
     
  9. @CapFuture:
    schau dir die Funktion atoi nochmal genauer an.

    int atoi(const char *nptr);

    fällt dir was auf?
    die warning sagts dir übrigens auch ganz genau.

    1 ... 2 ... 3 ... Zeit ist um, jetzt sag ichs dir.

    Du hast irrtümlicherweise als Argument nen Character und nicht wie von der Funktion verlangt einen Character Pointer.

    Jetzt geht die Funktion natürlich her und nimmt deinen Rückgabewert als Adresse.
    Da müsst einfach Schrott, wenn nicht ein Segmentation Fault oder sonstwas kommen.

    lg, stessi!

    P.S.: hast du meine Antwort bezüglich Java auch ausprobiert?
     
  10. mattmiksys

    mattmiksys MacUser Mitglied

    Beiträge:
    1.904
    Zustimmungen:
    62
    Mitglied seit:
    04.06.2003
    Code:
    ...
        ergebnis=ergebnis * base + val;
    ...
    
    Noch nebenbei bemerkt: Dieser Weg ist eleganter (flotter), weil du dir die aufwändige power-Funktion ersparst. Sie wird nebenbei berechnet, indem Stelle für Stelle "nach links" eingeschoben wird (stimmt deine Indizierung?).

    Grüße,
    Matthias
     
Die Seite wird geladen...

Diese Seite empfehlen