私は次の出力を試しているアルゴリズムに取り組んでいます:
指定された値/入力:
char *Var = "1-5,10,12,15-16,25-35,67,69,99-105";
int size = 29;
ここで、 「1-5」は範囲値を示します。つまり、「1,2,3,4,5」と理解されますが、「,」のみの値は個々の値です。
私は最終出力が次のように完全な範囲の出力を与えるようなアルゴリズムを書いていました:
int list[]=1,2,3,4,5,10,12,15,16,25,26,27,28,29,30,31,32,33,34,35,67,69,99,100,101,102,103,104,105;
誰かがこの問題に精通している場合は、助けていただければ幸いです。前もって感謝します!
私の最初のコードアプローチは次のとおりです。
if(NULL != strchr((char *)grp_range, '-'))
{
int_u8 delims[] = "-";
result = (int_u8 *)strtok((char *)grp_range, (char *)delims);
if(NULL != result)
{
start_index = strtol((char*)result, (char **)&end_ptr, 10);
result = (int_u8 *)strtok(NULL, (char *)delims);
}
while(NULL != result)
{
end_index = strtol((char*)result, (char**)&end_ptr, 10);
result = (int_u8 *)strtok(NULL, (char *)delims);
}
while(start_index <= end_index)
{
grp_list[i++] = start_index;
start_index++;
}
}
else if(NULL != strchr((char *)grp_range, ','))
{
int_u8 delims[] = ",";
result = (unison_u8 *)strtok((char *)grp_range, (char *)delims);
while(result != NULL)
{
grp_list[i++] = strtol((char*)result, (char**)&end_ptr, 10);
result = (int_u8 *)strtok(NULL, (char *)delims);
}
}
ただし、「0-5」または「0,10,15」のいずれかがある場合にのみ機能します。汎用性が上がるのが楽しみです。