[英]How to split char* into 3 char* at delimiter?
我想分開一個char* time = "15:18:13";
進入char* hour;
, char* minute;
和char* seconds;
。
問題是我不知道怎么做。 我想嘗試Pebble Watchface。 我已經使用過char* hour = strok(time, ":");
但第一個參數需要是char[]
但時間是char*
。
有誰知道如何做到這一點?
根據alk的評論,可以使用的方法是sscanf
,如下所示:
#include <string.h>
int main ()
{
char* str = "15:18:13";
int a, b, c;
sscanf(str, "%d:%d:%d", &a, &b, &c);
printf("%d %d %d\n", a, b, c);
return 0;
}
但是,以下是更通用的解決方案。
使用strtok
。 您可以將它們存儲在一個數組中,如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char str[] ="15:18:13";
char * pch;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str,":");
char* a[3];
int i = 0;
while (pch != NULL)
{
a[i] = malloc( (strlen(pch)+1) * sizeof(char));
strcpy(a[i++], pch);
printf ("%s\n",pch);
pch = strtok (NULL, ":");
}
for(i = 0 ; i < 3 ; i++)
printf ("%s\n",a[i]);
return 0;
}
根據Deduplicator的建議, strdup
也可以提供幫助,但這不是標准的,因此我建議避免(或實施自己的,而不是那么難)。 :)
此外, strtok_s
中沒有提供Deduplicator提到的strtok_s
。
回復OP的評論如下:
問題:str是char str []但是時間是char *。 我能轉換一下嗎?
您可以將它分配給這樣的數組:
#include <stdio.h>
int main ()
{
char* from = "15:18:13";
char to[strlen(from) + 1]; // do not forget +1 for the null character!
strcpy(to, from);
printf("%s\n", to);
return 0;
}
禮物:我建議你從這里讀到第一個答案。
它為char*
和char[]
提供了一個平滑的解釋。
不需要那些api。 Pebble有超時的api: strftime
tm *tmNext = localtime(&timeRequestTmp);
static char strformatForTimeNext[10];
strftime(strformatForTimeNext,10,"%H:%M",tmNext);
text_layer_set_text(layer_nextTime, strformatForTimeNext);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.