Wie greif ich auf die ASCII Tabelle zu???
-
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:)
-
supertux schrieb:
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.
Was der Verbreitung von C99 sicher sehr zuträglich ist
Aber das ist ein anderes Thema...
-
Tim schrieb:
Was der Verbreitung von C99 sicher sehr zuträglich ist
Aber das ist ein anderes Thema...
klar, aber ich das können die Benutzer der Compiler nicht beeinflussen, sondern die Leute, die den Compiler schreiben
-
BorisDieKlinge schrieb:
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^^
Klar, für "Hobby-Anwendungen" stört der Unterschied vermutlich nicht - aber bei größeren Anwendungen (und vor allem - längeren Strings) ist es schon ein Unterschied, ob du quadratische oder lineare Laufzeit hast.