Bestimmte anzahl von Zeichen aus einem String

Uli_87

Erfahrenes Mitglied
Guten Tag,

Ich habe bisher noch nie in C programmiert, immer nur PHP. Nun muss ich ein script vorbereiten der mir aus einer Variable typ STRING mit diesem Inhalt '13:20' die ersten 2 zeichen in einer INT Variable setzt und die Zeichen 3 und 4 in einer anderen INT Variabel setzt, mit PHP würde ich es durch substr machen, mit C wüsste ich aber nicht wie das funktionieren könnte!

Danke im voraus!

Gruss
Uli
 
Moin Uli,

Nun muss ich ein script vorbereiten der mir aus einer Variable typ STRING mit diesem Inhalt '13:20' die ersten 2 zeichen in einer INT Variable setzt und die Zeichen 3 und 4 in einer anderen INT Variabel setzt, mit PHP würde ich es durch substr machen, mit C wüsste ich aber nicht wie das funktionieren könnte!

Ich nehme mal nicht an, dass Du wirklich ein Script in C schrieben willst, oder :suspekt:

Das hängt von Datentyp der entsprechenden Variable ab!

Denkbar wäre bspw.:
Code:
char cZeit [6];
cZeit = "13:20";
cZeit[5] = 0;

// Zugriff über den Index
char cStunde[3];
cStunde[0] = cZeit[0];   // die '1'
cStunde[1] = cZeit[1];   // die '3'
cStunde[2] = 0;              // Terminierung!!
int iStunde = atoi(cStunde);

char cMinuten[3];
cMinuten[0] = cZeit[3];   // die '2'
cMinuten[1] = cZeit[4];   // die '0'
cMinuten[2] = 0;              // Terminierung!!
int iMinuten = atoi(cMinuten);

Geht sicher deutlich eleganter, erklärt aber ganz gut den Umgang mit den einfachen Zeichenketten! Alles andere hängt von Deinem restlichen Code ab!

Poste ihn ggf., dann kann man besser erklären was Du wie machen solltest !

Ich hoffe, das hilft fürs erste !

Gruß
Klaus
 
Hallo vfl_freak,

Danke für die schnelle Antwort, die Variabel besitzt den Datentyp STRING, geht es auch mit dem Datentyp?

Ich werde es morgen versuchen!

Bis dann
Uli
 
Einen wunderschönen guten Abend,

Danke für die schnelle Antwort, die Variabel besitzt den Datentyp STRING, geht es auch mit dem Datentyp?

Natürlich geht das auch mit dem Datentyp string. Allerdings wären wir dann bei C++. Die Funktion, die du dazu benötigst, heißt ebenfalls substr():

C++:
#include <string>
#include <sstream>  // für stringstream

string myString = "13:20";
string myStringPart1;
string myStringPart2;
int firstNumber;
int secondNumber;
stringstream myStream;

myStringPart1 = myString.substr(0, 1);
myStringPart2 = myString.substr(3, 4);
myStream << myStringPart1;
myStream >> firstNumber;
myStream << myStringPart2;
myStream >> secondNumber;

Das ganze ist nur ein Code-Schnippsel und noch kein funktionsfähiges Programm. Es ist demnach auch nicht getestet. Aber die Richtung sollte stimmen.

Gruss
Mizi
 
@Uli: Ist wirklich der "Datentyp" STRING gefragt, oder ist in der Aufgabenstellung nur von einem String die Rede?
EIn String ist in C eben ein char-Array wie im 2. Beitrag, nur steht halt nicht das Wort "string" im Quelltext...
Kann ja sein, das du das längst weißt, aber es gibt viele von den Umsteigern auf C, denen das nicht klar ist (kA, wie das in PHP ist).
In dem Fall wäre der 2. Beitrag völlig in Ordnung (im Bezug auf Strings etc)

@vfl_freak: Was machst du, wenn der Startwert "8:23" ist?
 
Hallo,

Danke Sehr für die Antworten.

Ich muss das ganze in C programmieren, mir war es nicht klar, dass ein String auch als Char bearbeitet wird. Danke für dir Aufklährung, ich werde den Script jetzt versuchen!

Noch ne kleine Frage:
Was nutzen die;
#include <string>
#include <sstream> // für stringstream


Melde mich dann gleich!

Gruss
Uli
 
Hallo,

Also ich muss mich entschuldigen aber das ganze war für nichts, nun sollte ich das in SCL programmieren (soviel ich weiss ist die programmiersprache ähnlich wie PASCAL) eine funktion substr gibt es dort leider nicht, vielleicht heisst sie anders! Wisst ihr wie man das Lösen kann?

Danke
Gruss
Uli
 
@vfl_freak: Was machst du, wenn der Startwert "8:23" ist?

Moin sheel,

vermutlich ein dummes Gesicht :-)

Nein, im Ernst: das hängt dann ja wohl von den jeweiligen Gegebenheiten ab. Wenn die Uhrzeit bspw. wirklich nur mit Zeichenketten abgearbeitet wird, könnte man hier halt sicherstellen, dass der Wert mit "08:23" vorbelegt ist.
Oder man betrachtet den übergebenen Wert als regulären Ausdruck, scannt nach dem Doppelpunkt und konvertiert dann die Bereiche vorher und nachher zu int.

Ob das alles Sinn macht, kann ich eh' nicht beurteilen, da ich den gesamten Rest (der Anwendung resp. der Aufgabenstellung) nicht kenne!
Ich würde es eigentlich immer bevorzugen, gleich das von der jeweiligen DB vorgegebene Datumsformat zu verwenden! ;-]

Gruss
Klaus
 
Zuletzt bearbeitet:
Zurück