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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.