http://www.pronix.de -> Forum -> C-Programmieren -> Code-Schnipsel

Unterseiten

Code-Schnipsel

Moderatoren: broesel, Martin Conrad, Patrick

Thema: String aus String in INT umwandeln

  • (nur registrierte Mitglieder)

String aus String in INT umwandeln

Patrick (Moderator) am 28.12.2005 um 17:35

Gesucht war eine Funktion, die einen bestimmten Abschnitt aus einem String in ein INT umwandelt.
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.

 
Ich hab wenig Zeit, deswegen nur die Dinge, die mir auf die Schnelle aufgefallen sind.


#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

TP:
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 Grafik: Smilie Zwinker

--
To follow the path: look to the master, follow the master, walk with the master, see through the master, become the master.

 
Zitat:

Mit einer Vorschaufunktion wäre das wohl nicht passiert, danke Grafik: Smilie Zwinker


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 Grafik: Smilie Zwinker


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

 
  • (nur registrierte Mitglieder)