www.mikrocontroller.net

Forum: Compiler & IDEs char in int umwandeln?


Autor: Cha_KO (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jonas G. (jonny)
Datum:

Bewertung
0 lesenswert
nicht 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/cstdli...

Autor: helmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im einfachsten Fall so

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

Gruss Helmi

Autor: Cha_KO (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm, das mit sscanf versteh ich nicht wirklich

Autor: Jonas G. (jonny)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.cplusplus.com/reference/clibrary/cstdio...
/* sscanf example */
#include <stdio.h>

int main ()
{
  char string []="01234567890";
  int i;

  sscanf (string+10,"%d",&i);
   
  return 0;
}

Wenn ich mich jetzt nicht irre müsste i = 0 sein...

Autor: Cha_KO (Gast)
Datum:

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

Autor: Cha_KO (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jonas G. (jonny)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
char heinz;
char otto [] = "Es ist die 2te Stelle";
int i;

// 11 Stelle in heinz speichern
heinz = otto[11];

// Char in Integer wandeln
i = atoi(heinz);


i = 2

Autor: Cha_KO (Gast)
Datum:

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

Autor: Rainer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich mich nicht irre, dann ist die Frage: "Was ist der Wert dieser 
Dezimalstelle?"

Wenn ja, dann lautet das Ergebnis:
char hans[] = "01234567890";
int wert = hans[9] - '0';
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:
char hans[] = "01234567890";
int wert = -1;
if ( isdigit(hans[9]) )
{
  wert = hans[9] - '0';
}
printf("Der Wert der zehnten Stelle ist %d\n", wert);

Dann sagt uns zumindest die -1, dass hier keine Dezimalziffer vorlag!

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> atoi gibt immer null zurück...
atoi erwartet einen '0-terminierten String':
char heinz[2]; //mindestens 2
char otto [] = "Es ist die 2te Stelle";
int i;

// 11 Stelle in heinz speichern
heinz[0] = otto[11];
heinz[1] = 0;

// Char in Integer wandeln
i = atoi(heinz);

Aber Rainer hat schon recht: atoi ist overkill, wenn es nur um eine 
Stelle geht.

hth. Jörg

Autor: Cha_KO (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, so gehts;)

Autor: Tim Staats (123sledge)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sebastian S. (amateur)
Datum:

Bewertung
-2 lesenswert
nicht 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...

Autor: Dirk B. (dirkb2)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.