Wie greif ich auf die ASCII Tabelle zu???



  • Hallo!

    Ich bin blutiger anfänger und daher wird meine frage wahrscheinlich einigen als dumm erscheinen.

    Ich möchte wissen wie ich auf die ascii tabelle zugreifen kann. es ist so, ich muss ein array davon erstellen womit ich dann mittels index ein anderes array vergleiche.

    kann mir wer helfen?

    LG

    Marla



  • Es gibt an sich keine ASCII Tabelle, auf die man zugreifen kann. Der Integer Wert eines Zeichens enstpricht dem ASCII Wert.

    char c = 'h';
    
    printf("ascii(%c) = %d\n", c, c);
    

    Wenn du eine Tabelle willst, musst du dir selber ein Array anlegen

    char ascii_table[127];
    int i;
    
    for(i=0; i < 127; ++i)
        ascii_table[i] = i;
    


  • DANKE!!

    Das ist es was ich wissen wollte!! ich hätte noch viele fragen aber jetzt hab ich mal einen guten denkanstoss, das wird fürs erste genügen!!!

    DANKE!!!!!



  • Hmm und wie kann ich einen string in die dezimal stellen verwandeln? also anstatt 'h' ein "hallo"?



  • Marla666 schrieb:

    Hmm und wie kann ich einen string in die dezimal stellen verwandeln? also anstatt 'h' ein "hallo"?

    😕 ich verstehe deine Frage nicht. Was hat "hallo" mit der dezimal Stelle zu tun?



  • ööhm ja das hab ich schlecht ausgedrückt: ich möchte dass dann alle dezimaldarstellungen von jedem zeichen kommen, also: h=104 a=97 usw.



  • Du gehst in einer Schleife durch den String, bis du die terminierende '\0' erreicht hast und lässt bei jedem Iterationsschritt den zugehörigen Zahlenwert anzeigen?



  • hmm ja, aber wie mach ich das dass dann genau nur die zahlen die ich brauch angezeigt werden, oder halt zurückgeliefert? also die vom h und vom a usw.
    ich bin erst seit einem monat am programmieren und wirklich nicht gut, also entschuldigt meine fragen...



  • Du solltest dich in ein gutes Buch/Tutorial einarbeiten. Wenn du wegen jeder "kleinigkeit" hier ein Topic aufmachst wirst du auf dauer keine ordentlichen antworten mehr erhalten. Eigeninitiative ist gefragt.

    Weist du denn was Schleifen sind? Und was Arrays sind?
    Die beiden sachen benötigst du dafür!
    Was hast du denn schon ausprobiert?

    schirrmie



  • Also, im prinzip weiss ich schon was schleifen sind, ich versteh nur einfach nicht wie das funktionieren soll, wenn man etwas hochzählt und dann auf eine zahl die darin vorkommt zugreifen soll, weil es zählt doch nur bis zum ende? ich bin nicht so der logische typ, ich glaub das ist mein hauptproblem.
    keine sorge ich werd nicht verlangen mein ganzes beispiel von euch lösen zu lassen. der kleine ansatz von vorhin, hat mich schon sehr weit gebracht.



  • Im Schleifenrumpf kannst du prinzipiell machen, was du willst - dabei kannst du natürlich auch den aktuellen Wert der Zählvariablen verwenden (z.B. als Index, um auf einzelne Buchstaben deines Strings zuzugreifen).



  • Ja das ist schon klar, aber wie 'stopp' ich die schleife an der stelle wo ich will?



  • Indem du die passende Abbruchbedingung definierst (wenn du jedes Zeichen eines Strings abarbeiten willst, bietet sich for(i=0;str[i]!='\0';++i) mac_was; an - '\0' ist die Stringende-Marke von C).



  • Aaah! Ja dann probier ich das mal so. Danke!!



  • char acString[6]="Hallo";
    
    for(int i=0; i <strlen(acString); i++){
    
     printf("%c -> %i",acString[i],(int)acString[i]); 
    
    }
    


  • BorisDieKlinge schrieb:

    char acString[6]="Hallo";
    
    for(int i=0; i <strlen(acString); i++){
     
     printf("%c -> %i",acString[i],(int)acString[i]); 
    
    }
    

    nope

    1. "for(int i=0; i <strlen(acString); i++)" ist in C nicht gültig
    2. Man nehme kein strlen in der Schleifbedingung, dann läuft die Schleife in O(n²) statt O(n), weil strlen immer wieder aufgerufen wird. [1]

    char acString[6]="Hallo";
    size_t i,len;
    
    len = strlen(acString);
    
    for(i=0; i < len; i++){
    
     printf("%c -> %i",acString[i],(int)acString[i]); 
    
    }
    

    ---

    [1] Die Diskussion hatten wir schon oft, in diesem Fall wird "i <strlen(acString);" nicht optimiert, weil der Compiler nichts über die Semantik einer gewissen Funktion strlen weiß und deswegen nicht annehmen darf/kann, dass sie immer den selben Wert zurückliefert, obwohl acString im Rumpf der Schleife nur lesend zugegriefen wird. Betrachte

    #include <stdio.h>
    #include <string.h>
    
    size_t mystrlen(const char *str)
    {
        printf("Wieder ein Aufruf von strlen\n");
        return strlen(str);
    }
    
    int main(void)
    {
        char world[] = "Hello World";
        int i;
        for(i=0; i < mystrlen(world); ++i)
            printf("world[%d] = %c\n", world[i], world[i]);
    
        return 0;
    }
    

    Egal welche Optimierungsstufe ich wähle (-O1, -O2, -O3, etc) ist die Ausgabe immer

    yanez@pselap08:~> ./strlen 
    Wieder ein Aufruf von strlen
    world[72] = H
    Wieder ein Aufruf von strlen
    world[101] = e
    Wieder ein Aufruf von strlen
    world[108] = l
    Wieder ein Aufruf von strlen
    world[108] = l
    Wieder ein Aufruf von strlen
    world[111] = o
    Wieder ein Aufruf von strlen
    world[32] =  
    Wieder ein Aufruf von strlen
    world[87] = W
    Wieder ein Aufruf von strlen
    world[111] = o
    Wieder ein Aufruf von strlen
    world[114] = r
    Wieder ein Aufruf von strlen
    world[108] = l
    Wieder ein Aufruf von strlen
    world[100] = d
    Wieder ein Aufruf von strlen
    


  • supertux schrieb:

    1. "for(int i=0; i <strlen(acString); i++)" ist in C nicht gültig

    auch nicht in C99?



  • es ist mir auch klar das strlen immer wieder augeurfen wird, aber es funktioniert trozdem! Die Performance spiel keine rolle in dem fall



  • 999 schrieb:

    supertux schrieb:

    1. "for(int i=0; i <strlen(acString); i++)" ist in C nicht gültig

    auch nicht in C99?

    doch, in C99 schon, aber da die wenigsten Compiler C99 vollständig unterstützen, sollte man das lieber (noch) nicht machen.

    BorisDieKlinge schrieb:

    es ist mir auch klar das strlen immer wieder augeurfen wird, aber es funktioniert trozdem! Die Performance spiel keine rolle in dem fall

    ne ne, Performance spielt nie eine Rolle 🙄... Wenn man nie dran denkt, wird man nie performanten Code schreiben können, das ist nur meine Meinung.



  • naja ich schreibe perfomanten code wenns notwendig ist... auserdem ist performance relativ...bei so einer primitiven for-schleife mit 10 iterationen, kann man den gschwindigkeits unterschied nich mal messen^^

    in deinem beispiel nehmen die printf's die meinse performance weg;)

    Aber las uns nich streiten.. 🤡

    P.S.: Schau dir mal meine threads hier in ANSI C an, vll. kannst mir ja helfen:)


Log in to reply