Forum: PC-Programmierung Hilfe - String umwandeln


von Peter (Gast)


Lesenswert?

Hallo, ich habe zwei Strings, die ich in ein Format umwandeln möchte.

1. String: Datum: 160707 --> 16/07/07
2. String: Zeit : 102001 --> 10:20:01

Wie kann ich dies in C++ realisieren?

von Peter (Gast)


Lesenswert?

Erster String: 160707 soll umgewndelt werden in 16/07/07
Zweiter String: 102001 soll umgewndelt werden in 10:20:01

von Karl H. (kbuchegg)


Lesenswert?

Peter wrote:
> Hallo, ich habe zwei Strings, die ich in ein Format umwandeln möchte.
>
> 1. String: Datum: 160707 --> 16/07/07
> 2. String: Zeit : 102001 --> 10:20:01
>
> Wie kann ich dies in C++ realisieren?

Indem du mit den Stringfunktionen die einzelnen Teile
herauslöst und neu arrangierst. std::string hat eine
Memberfunktion substr

Alternativ könnte man auch auf die einzelnen Character
im String direkt zugreifen. Aber nur wenn garantiert
ist, dass der Aufbau des Strings immer gleich ist

  std::string first = "160707";

  std::cout << first[0] << first[1] << "/"
            << first[2] << first[3] << "/"
            << first[4] << first[5];

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wo ist das Problem? Zwei Zeichen aus dem Quellstring extrahieren, 
Füllzeichen einfügen, weitere zwei Zeichen extrahieren, Füllzeichen 
einfügen, restliche Zeichen aus Quellstring extrahieren.

Ganz plump:

char* quelle
char ziel[10];

ziel[0] = quelle[0];
ziel[1] = quelle[1];
ziel[2] = ':';
ziel[3] = quelle[2];
ziel[4] = quelle[3];
ziel[5] = ':';
ziel[6] = quelle[4];
ziel[8] = quelle[5];
ziel[9] = '\0';

Lässt sich sicherlich hübscher erledigen.

von Wilhelm Busch (Gast)


Lesenswert?

und wo bleibt ziel[7]?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das bleibt dem geneigten Leser überlassen. Bei etwas über 30° 
Raumtemperatur darf ich Ziel[7] übersehen.

von Peter (Gast)


Lesenswert?

Wie könnte ich dann das Datum und die Uhrzeit in Integer umwandeln?

1. Datum: 16/07/07 --> year=07,mon=07,day=16
2. Zeit : 10:20:01 --> hour=10,min=20,sec=01

Ich hab es mal so gelöst:

        char buf[20];
        char temp[3];
        int hour;

  strcpy(time, buf);
  temp[0] = buf[0];
  temp[1] = buf[1];
  temp[2] ) '\0';
        hour = atoi(temp);

WIe könnte man dies eleganter lösen?

von Karl H. (kbuchegg)


Lesenswert?

Peter wrote:
> Wie könnte ich dann das Datum und die Uhrzeit in Integer umwandeln?
>
> 1. Datum: 16/07/07 --> year=07,mon=07,day=16
> 2. Zeit : 10:20:01 --> hour=10,min=20,sec=01
>
> Ich hab es mal so gelöst:
>
>         char buf[20];
>         char temp[3];
>         int hour;
>
>   strcpy(time, buf);
>   temp[0] = buf[0];
>   temp[1] = buf[1];
>   temp[2] ) '\0';
>         hour = atoi(temp);
>
> WIe könnte man dies eleganter lösen?

Indem du dich daran erinnerst, dass die Zahl 52 (ist nur
ein Beispiel, geht auch mit allen anderen Zahlen) nichts
anderes ist als 5 * 10 + 2

10:20:01

  hour = ( buf[0] - '0' ) * 10 + ( buf[1] - '0' );

Noch eleganter wird das mit ein paar kleinen Hilfsfunktionen
1
unsigned char Digit( char Character )
2
{
3
  return Character - '0';
4
}
5
6
int ToNumber( const char* String )
7
{
8
  return Digit( String[0] ) * 10 + Digit( String[1] ) );
9
}
10
11
int main()
12
{
13
  char Buff[] = "10:20:01";
14
  int Hour, Min, Sec;
15
16
  Hour = ToNumber( Buff );
17
  Min  = ToNumber( &Buff[3] );
18
  Sec  = ToNumber( &Buff[6] );
19
}

von Peter (Gast)


Lesenswert?

Danke Karl!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.