Also, ich habe eine char Array, was z.B. so aussieht: char text] ="hallo,123456,test,45678"; nun möchte ich zb die 10. stelle des Arrays, von dem ich weiß, das es immer eine int Zahl ist, in eine Integer Variable speichern... Wie geht das? Kons
Wenn du mit C arbeitest geht das mit: Muss natürlich noch etwas programmieren, das nut die 10. Stele übergeben wird... http://www.cplusplus.com/reference/clibrary/cstdlib/atoi.html
http://www.cplusplus.com/reference/clibrary/cstdio/sscanf.html
1 | /* sscanf example */
|
2 | #include <stdio.h> |
3 | |
4 | int main () |
5 | {
|
6 | char string []="01234567890"; |
7 | int i; |
8 | |
9 | sscanf (string+10,"%d",&i); |
10 | |
11 | return 0; |
12 | }
|
Wenn ich mich jetzt nicht irre müsste i = 0 sein...
hmm, das funtioniert so nur, wenn in dem string nur zahlen steh, sobald das buchstaben oder andere zeichen, gehts nich mehr:(
naja, mit dem atoi befehl würde es ja gehn, aber wie kann ich die xte stelle eine char arrrays in ein char kopieren?
1 | char heinz; |
2 | char otto [] = "Es ist die 2te Stelle"; |
3 | int i; |
4 | |
5 | // 11 Stelle in heinz speichern
|
6 | heinz = otto[11]; |
7 | |
8 | // Char in Integer wandeln
|
9 | i = atoi(heinz); |
i = 2
so hab ichs mir ja auch gedacht, aber es geht nich...atoi gibt immer null zurück...
Wenn ich mich nicht irre, dann ist die Frage: "Was ist der Wert dieser Dezimalstelle?" Wenn ja, dann lautet das Ergebnis:
1 | char hans[] = "01234567890"; |
2 | int wert = hans[9] - '0'; |
3 | printf("Der Wert der zehnten Stelle ist %d\n", wert); |
Wenn natürlich Sachen wie Fehlerbehandlung interessant sind, dann bietet sich vielleicht noch folgendes an:
1 | char hans[] = "01234567890"; |
2 | int wert = -1; |
3 | if ( isdigit(hans[9]) ) |
4 | {
|
5 | wert = hans[9] - '0'; |
6 | }
|
7 | printf("Der Wert der zehnten Stelle ist %d\n", wert); |
Dann sagt uns zumindest die -1, dass hier keine Dezimalziffer vorlag!
> atoi gibt immer null zurück...
atoi erwartet einen '0-terminierten String':
1 | char heinz[2]; //mindestens 2 |
2 | char otto [] = "Es ist die 2te Stelle"; |
3 | int i; |
4 | |
5 | // 11 Stelle in heinz speichern
|
6 | heinz[0] = otto[11]; |
7 | heinz[1] = 0; |
8 | |
9 | // Char in Integer wandeln
|
10 | i = atoi(heinz); |
Aber Rainer hat schon recht: atoi ist overkill, wenn es nur um eine Stelle geht. hth. Jörg
moin, der beitrag ist zwar schon etwas ölter aber vllt guckt ja doch noch jmd rein... ich habe ein array von strings gegeben: char texte[ANZAHL][MAXLEN] = { "tümä", "zoäö", "yköa"}; und soll die umlaute zb. "ä" durch "ae" ersetzen. im skript des profs gibt es diese funktion: //-------------------------- int c; while ((c = getchar())!= EOF) { switch(c) { case 0x84: putchar('a'); putchar('e'); break; case 0x94: putchar('o'); putchar('e'); break; case 0x81: putchar('u'); putchar('e'); break; default: putchar(c); } //---------------------------- wie kriege ich den string der reihe nach zeichenweise ausgelesen um die zeichen durch die whileschleife zu schicken. getchar() fragt den user nach ner eingabe, diese soll aber nicht gemacht werden, weil der string schon vorhanden ist. meine überlegung war, die strings mit zwei for-schleifen durchzulaufen und jedes zeichen von char in int umwandeln und dann in die switchabfrage... vllt hat ja jmd nen guten rat, ich wäre auf jeden fall sehr froh! vielen dank im voraus.
Normalerweise nimmt man hierzu eine Schere oder eine Kopierfunktion, extrahiert sozusagen die Zahl Netto, und konvertiert den Ausschnitt bzw. den Auszug in eine Zahl. Liegt die Zahl z.B. am Ende eines Bereiches, so kann man auch dessen Adresse an atoi übergeben. Wichtig ist hierbei, dass keine Nichtzahlen folgen, bzw. sich im übergeben Bereich befinden. Muss aber nicht so machen...
Tim S. schrieb: > der beitrag ist zwar schon etwas ölter aber vllt guckt ja doch noch jmd > rein... Deine Frage hat sehr wenig mit dem Thema zu tun. Nach der Zeit ist ein neuer Thread sehr empfehlenswert. Ein char ist eine Ganzzahl mit kleinem Wertebereich. Ob du 65 oder 0x41 oder 'A' schreibst ist egal, gibt (bei ASCII) denselben Wert. Bei Umlauten ist es schwieriger, deren Wert sehr abhängig vom gewählten Code/Codepage ist. Dein größeres Problem wird sein, dass du jetzt 2 Zeichen anstelle von einem unterbringen musst.
Tim S. schrieb: > der beitrag ist zwar schon etwas ölter aber vllt guckt ja doch noch jmd > rein... > > ich habe ein array von strings gegeben: > > char texte[ANZAHL][MAXLEN] = { "tümä", "zoäö", "yköa"}; > > und soll die umlaute zb. "ä" durch "ae" ersetzen. Und was hat das jetzt mit dem ursprünglichen Thema zu tun? > meine überlegung war, die strings mit zwei for-schleifen durchzulaufen > und jedes zeichen von char in int umwandeln und dann in die > switchabfrage... Wozu zwei Schleifen? Und der char wird ganz von selbst in int umgewandelt. Da muss man nichts tun. Du musst eigentlich nur den Teil zwischen den runden Klammern in der while-Schleife ändern, sonst nichts.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.