Code-Schnipsel
Moderatoren: broesel, Martin Conrad, PatrickThema: String aus String in INT umwandeln
String aus String in INT umwandeln
Patrick (Moderator) am 28.12.2005 um 17:35
Damit für atoi() nicht extra einen temp. Puffer beschrieben werden muss, habe ich mir folgendes überlegt:
- Anfangsosition im String merken, ab wo der String umgewandelt werden soll (char *z1);
- Endposition im String, bis wo der String umgewandelt werden soll, temporär mit 0 überschreiben;
- z1 an atoi() übergeben und Rückgabewert speichern/verarbeiten;
- temp. Terminierung rückgängig machen;
Für den Fall, dass es noch keine vergleichbare Funktion gibt ...
#include <stdio.h>
#include <stdlib.h> // atoi()
#include <string.h> // size_t strlen()
/*
konvertiert Zeichenkette innerhalb einer Zeichenkette mit Laenge i nach INT;
*/
int _strtoi(char *s, unsigned i){
int r,b;// Rueckgabewert; temp. speicher
// Parameter 1 pruefen
if (NULL==s)
return -1;
// Parameter 2 pruefen
if (i<1)
return -2;
// im reservierten Speicherbereich bleiben
if (strlen(s)<i)
return -3;
// das erste Byte nach der zu konvertierenden Zeichenkette sichern
b=*(s+i);
// String temporär entsprechend terminieren
*(s+i)=0;
// String in int konvertieren
r=atoi(s);
// temp. Terminierung rueckgaengig machen
*(s+i)=b;
return r;
}
int main(){
// Beispielstring
char string[]="String mit Zahl 25 die umgewandelt werden soll.";
// Zeiger auf den Anfang der Zahl
char *z1=&(string[16]);
// Zeiger auf das Ende der Zahl bzw. auf das 1. Byte nach der Zahl
char *z2=&(string[18]);
printf("%d\n",_strtoi(z1,z2-z1));
return -1;
}
--
To follow the path: look to the master, follow the master, walk with the master, see through the master, become the master.
Re: String aus String in INT umwandeln
TP am 28.12.2005 um 17:45
#include <stdio.h>
#include <stdlib.h> // long atol() | int atoi()
#include <string.h> // size_t strlen()
/*
konvertiert Zeichenkette innerhalb einer Zeichenkette mit Laenge i nach INT;
*/
int _strtol(char *s, unsigned i)
{
int r,b;// Rueckgabewert; temp. speicher
// Parameter 1 pruefen
if (NULL==s)
return -1;
// Parameter 2 pruefen
if (i<1)
return -2;
// im reservierten Speicherbereich bleiben
if (strlen(s)<i)
return -3;
// das erste Byte nach der zu konvertierenden Zeichenkette sichern
b=*(s+i);
// String temporär entsprechend terminieren
*(s+i)=0;
// String in int konvertieren | nicht in long!
r=atoi(s);
// temp. Terminierung rueckgaengig machen | Auskommentierung vergessen
*(s+i)=b;
return r;
}
int main(){
// Beispielstring
char string[]="String mit Zahl 25 die umgewandelt werden soll.";
// Zeiger auf den Anfang der Zahl
char *z1=&(string[16]);
// Zeiger auf das Ende der Zahl bzw. auf das 1. Byte nach der Zahl
char *z2=&(string[18]);
printf("%d\n",_strtol(z1,z2-z1)); // Der Rückgabewert ist int nicht long
return -1;
}
[EDIT] - Re: String aus String in INT umwandeln
Patrick (Moderator) am 28.12.2005 um 17:50
Ursprüngl sollte die Funktion nach nach long umwandeln, deshalb auch der Name "_strtol".
Während ich die Funktion für für hier geschrieben habe, habe ich das aber wieder umgeschmissen, weil ich es nebenbei nur mit int getestet habe.
Mit einer Vorschaufunktion wäre das wohl nicht passiert, danke
--
To follow the path: look to the master, follow the master, walk with the master, see through the master, become the master.
Re: String aus String in INT umwandeln
TP am 29.12.2005 um 20:25
Zitat:
Mit einer Vorschaufunktion wäre das wohl nicht passiert, danke![]()
Jap, bitte Martin könntest Du dem Forum noch einige Funktionen "spendieren" (Vorschau, Wer ist wo online?, Mitgliederliste, etc.)?
Re: String aus String in INT umwandeln
Martin Conrad (webmaster) am 29.12.2005 um 22:04
Zitat:
Zitat:
Mit einer Vorschaufunktion wäre das wohl nicht passiert, danke![]()
Jap, bitte Martin könntest Du dem Forum noch einige Funktionen "spendieren" (Vorschau, Wer ist wo online?, Mitgliederliste, etc.)?
Vorschau ist wie einige andere Sachen in der Mache. "wer ist online", "Mitgliederliste" etc. wird es aus Datenschutzgründen nicht geben.
Ich finde das bei anderen Boards recht heftig, dass die Dinger ausplaudern, wann wer online war!
Bis denne
Martin
--
0xC0FFEE
