char in int umwandeln?

Gast #702692
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!
Gast #702698
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
#4439732
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.
#4439754
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...
#4439982
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.
#4441140
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren