2016-12-01 18 views
1

ich eine eingehende Zeichenfolge wie dieses: - *DDMMYYHHMMSS#DD Stände für Date, MM steht für month, YY steht für year steht HH für Hour ...Extract int Werte von String

Beispiel *021216213940# (Datum: 2. Dezember 2016 Zeit: 21:29:40)

Wie kann ich Werte von oben angegebenen Zeichenfolge extrahieren und in Int-Datentyp kopieren.

int Date,Month,Year,Hours,Minutes,Seconds; 
+0

'int Datum = (str [1] - '0') * 10 + str [2] - '0''. –

+0

Warum mit 10 multiplizieren? –

+0

Sie multiplizieren mit '10', um die" Zehner "zu erhalten. Zum Beispiel, wenn die erste Ziffer "2" ist, dann "2 * 10 = 20". –

Antwort

1

Um den Inhalt der Zeichenfolge Sie müssen konvertieren (eine zweistellige) Dezimalzahl, die eine ten-based positional system ist zu konvertieren.

Zum Beispiel die ersten beiden Ziffern, die Sie tief operator[], dh str[1] und str[2] verwenden extrahieren von char zu int konvertieren Sie subtrahieren '0' Zeichen verwendet ASCII Charakter Ordnung und schließlich richtige Position der Ziffern, die Sie durch 10 multiplizieren, um sicherzustellen, dass:

int DD = (str[1] - '0') * 10 + str[2] - '0'; 

+0

Zufälliger Name einer Variablen, die ersten zwei Ziffern Ihrer Zeichenfolge, es sollte Tag sein, denke ich. – Ziezi

+2

Es ist ein Datum. Es ist mir aus den Sinn gekommen. –

+0

Ist alles andere verständlich genug? Brauchst du weitere Ausarbeitung? – Ziezi

2

Sie scanf Familie Funktionen nutzen zu können, wie folgt aus:

char *incoming = "*021216213940#"; 
int day, month, year, hours, minutes, seconds; 
if (6 != sscanf(incoming, "*%2d%2d%2d%2d%2d%2d#", &day, &month, &year, &hours, &minutes, &seconds)) 
{ 
    ... /* handle invalid input here */ 
} 
+0

+1. Genau wie hinzufügen, dass 'sscanf' verwendet werden kann, wenn sich die Eingabe bereits in einer Zeichenfolge befindet. Wie 'char * p =" * 021216213940 # "; if (6! = sscanf (p, "*% 2d% 2d% 2d% 2d% 2d% 2d #", & Tag, & Monat, & Jahr, & Stunden, & Minuten, & Sekunden)) {/ * error handlind * /} ' – 4386427