atoi

Tutorials.at
Verfügbare Informationen zu "atoi"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: phein - Dirty Oerty - exbs - DrPhil_Guth
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: C / C++
  • Antworten: 5
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: atoi
  • Letzte Antwort: vor 17 Jahren, 2 Monaten, 2 Tagen, 4 Stunden, 40 Minuten
  • Alle Beiträge und Antworten zu "atoi"

    Re: atoi

    phein - 15.02.2007, 13:06

    atoi
    mahlzeit zusammen.

    habe da mal ne frage. ich denke mal ihr seit mit int atoi (const char * nptr) vertraut.

    das problem ist, ich habe heute als zusatzhausarbeit vom prof noch die aufgabe bekommen die funktion selber zu realisieren.

    d.h. eine funktion schreiben, die wie atoi arbeitet. das programm am ende sieht wie folgt aus das ich nen string den ich füllen darf wie ich will, der soll umgewandelt werden und dann mit ++ hochgerechnet werden, damit man sieht, ja es ist nun ein int.

    das problem ist, dass ich das nicht wirklich ne ahnung habe wie.

    die einzelnen zeichen aus dem string einzulesen und in ein array zu stopfen ist ja nicht das problem, aber so wie ich es verstanden habe, soll am ende eine intzahl rauskommen, geht das überhaupt so?

    danke schonmal für eure hilfe!



    Re: atoi

    Dirty Oerty - 15.02.2007, 18:43


    den mittelteil hab ich zwar nich wirklich verstanden, aber dein problem kannste so ungefähr lösen:

    1 string einlesen und die einzelnen zeichen durchgehn
    2 dabei prüfen, ob das zeichen eine zahl ist
    3 wenn ja, dann noch gucken, ob dahinter weitere zahlen folgen

    zu 2: dazu brauchst du ja einfach nur ASCII-Codes vergleichen
    zu 3: etwas schwieriger. aber du schaust infach, wieviele zahlen direkt auf die zahl folgen.
    bsp:

    brag234dgs

    das is der stringinhalt.

    nu gehst du durch, merkst, da is ne zahl (die 2), speicherst die wo und setzt nen zähler auf 1, gehst weiter. merkst, da is noch ne zahl, also zahl in nem anderen buffer speichern und zähler erhöhen.

    am ende haste dann nen zähler von 3, also:

    als erstes gespeicherte zahl * 100 (oder 10 hoch 2)
    zweite zahl * 10;
    dritte zahl * 1;

    alle zusammenzählen, fertig.



    Re: atoi

    exbs - 15.02.2007, 19:30


    Lies den String ein. Dann, mit einer "if"-Anweisung prüfen ob Zahl (Stichwort ASCII). Wenn Zahl, per typcast "(int)" in integer wandeln, dann die 1. Zahl * Stringlänge, die 2. Zahl * (Stringlänge - 1) usw usw.

    Wenn ein Zeichen kene Zahl ist, dann kannst du sofort abbrechen. Ist bei der echten atoi auch so ... sie liefert, dann NULL.



    Re: atoi

    DrPhil_Guth - 15.02.2007, 20:20


    Hi! Ich hab mir mal genau zu dem thema gedanken gemacht.
    Rausgekommen ist ein (relativ schlampig geschriebener) Zahlenleser.

    Was ich gemacht habe:

    hauptdatei:

    1. String eingelesen
    2. objekt vom typ Zahlenstring (class_zahlen) gebildet
    3. Zahlen ausgegeben.

    Klasse:

    1. Als parameter des Konstruktors den string und seine Länge erhalten

    2. Der konstruktor ruft einer weitere funktion auf, die die zahlen abarbeitet

    3. Diese Funktion findet eine zahl nach der anderen, sucht das ende dieser zahl, kopiert diese zahl in einen string.

    4. der string wird durch eine funktion in einen integerwert umgewandelt

    5. der wert wird zwischengespeichert

    6. man kann den anfang, das ende, und den wert der zahl mit einer methode abfragen.



    Für dich interessant sind vor allem 4.
    das sieht so aus:
    Code:       
    int zahlenwert = 0;
    //Umwandlung eines Char- Zahlenarrays in eine integer- Zahl

          for (int j=0; j < ArrLen; j++)
             zahlenwert += ( (Array[j]-48) * pow(10.0, j) );
    48 Deswegen, weil 0 auf der ASCII Tabelle den wert 48 hat.

    Wenn du das ganze prog haben willst, dann schick mir bitte deine Email Addy per mail, dann kriegst du die zip datei.



    Re: atoi

    phein - 15.02.2007, 23:51


    habe es nun mal so gelöst. hat funktioniert.


    Zitat:
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>

    int char_to_int(const char *Wert);

    void main(void)
    {
    int Zahl;
    Zahl=char_to_int("767.534");
    }

    int char_to_int(const char *Wert)
    {
    int intZeichen=0;
    int intGanzeZahl=0;
    int intVorzeichen=0;

    intZeichen = (int)(unsigned char)*Wert++;

    if (intZeichen == 43 || intZeichen == 45)

    {
    intVorzeichen=intZeichen;

    intZeichen = (int)(unsigned char)*Wert++;

    }

    while (intZeichen>=49 && intZeichen<=57)

    {

    intGanzeZahl = 10 * intGanzeZahl + (intZeichen - 48);

    intZeichen = (int)(unsigned char)*Wert++;
    }


    if (intVorzeichen == 45)

    return -intGanzeZahl;

    else

    return intGanzeZahl;

    }



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Tutorials.at

    Programme mit Pascal - gepostet von bato am Montag 01.05.2006
    programm fertig und nun? - gepostet von DarkJiN am Donnerstag 09.08.2007
    zwei Funktion gleichteitig - gepostet von Elch am Montag 20.08.2007
    Client/Server - gepostet von d.d.d. am Sonntag 11.03.2007
    registry - gepostet von Moritz am Sonntag 18.11.2007
    C++ Lernen - gepostet von Nightm4r3 am Mittwoch 20.09.2006
    Unterschied Compiler, Interpreter, Parser - gepostet von Jack O'Neill am Dienstag 14.08.2007
    Männlich- Weiblich zeichen - gepostet von DrPhil_Guth am Sonntag 23.04.2006
    Rubik Würfel - gepostet von c# am Sonntag 25.03.2007



    Ähnliche Beiträge wie "atoi"

    atoi (Fehler: cast ??) - exbs (Mittwoch 20.12.2006)