Hilfe - String umwandeln

#605857
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];
Persönliche Seite #605859
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.
Gast #609463
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?
#609503
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren