Forum: Compiler & IDEs char in int umwandeln?


von Cha_KO (Gast)


Lesenswert?

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

von Jonas G. (jonny)


Lesenswert?

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

von helmi (Gast)


Lesenswert?

Im einfachsten Fall so

sscanf(text+10,"%d",&var)

Gruss Helmi

von Cha_KO (Gast)


Lesenswert?

hmm, das mit sscanf versteh ich nicht wirklich

von Jonas G. (jonny)


Lesenswert?

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...

von Cha_KO (Gast)


Lesenswert?

hmm, das funtioniert so nur, wenn in dem string nur zahlen steh, sobald 
das buchstaben oder andere zeichen, gehts nich mehr:(

von Cha_KO (Gast)


Lesenswert?

naja, mit dem atoi befehl würde es ja gehn, aber wie kann ich die xte 
stelle eine char arrrays in ein char kopieren?

von Jonas G. (jonny)


Lesenswert?

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

von Cha_KO (Gast)


Lesenswert?

so hab ichs mir ja auch gedacht, aber es geht nich...atoi gibt immer 
null zurück...

von Rainer (Gast)


Lesenswert?

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!

von Jörg X. (Gast)


Lesenswert?

> 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

von Cha_KO (Gast)


Lesenswert?

Danke, so gehts;)

von Tim S. (123sledge)


Lesenswert?

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.

von Sebastian S. (amateur)


Lesenswert?

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...

von Dirk B. (dirkb2)


Lesenswert?

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.

von Rolf M. (rmagnus)


Lesenswert?

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
Noch kein Account? Hier anmelden.