: 4;4=3;1=0,2=2,3=1,4=1,5=1;0003013340f59bce000002aaf01620e620198b2240002710;
C /解析字符串,什麼是我有一個這樣的字符串的最簡單的方法
它分離成部分「;」並且每個部分都可以有一個或多個鍵/值對,如5 = 1等等,如您所見。 我想解析它在純C,我開始與strtok
工作,我在我的代碼顯示在這裏:
const wuint8 section_delimiter[] = ";";
const wuint8 field_delimiter[] = ",";
const wuint8 value_delimiter[] = "=";
printf("%s\n",data->msg);
token = strtok(data->msg,section_delimiter);
while(token != NULL) {
indicator = atoi(token);
printf("indicator: %d\n", indicator);
switch(indicator) {
case TYPE_1: {
printf("type: %d\n",TYPE_1);
wuint16 i, headerType, headerSubType;
for(i = 1; i < TP_MAX; i++) {
if(i == atoi(token)) {
token = strtok(NULL,value_delimiter);
headerType = i;
headerSubType = atoi(token);
break;
}
}
break;
}
case TYPE_2: {
printf("type: %d\n",TYPE_3);
break;
}
case TYPE_3: {
printf("type: %d\n",TYPE_3);
break;
}
case TYPE_4: {
printf("type: %d\n",TYPE_4);
break;
}
我不知道如何正確地做到這一點。 它也變得複雜了,因爲不是每個字符串都有相同的結構,有時只有一個或兩個部分可以存在。例如:3;4=3;1=0,2=2,3=1,4=1,5=1;
是否有how to
這樣做是否顯示最好和最方便的方式?
請在您的案例中定義「最好」,或刪除該條款。 –
爲真。改爲「最簡單」:) – nyyrikki
我會說:分而治之。首先將該行分成三部分,由';'分隔。比:處理單獨的部分,也許處於子功能。子功能也可以處理空白部分。 – wildplasser