【发布时间】:2013-09-12 12:14:00
【问题描述】:
我正在研究一种算法,我正在尝试以下输出:
给定值/输入:
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”时它才有效。我期待着让它变得更加通用。
【问题讨论】:
-
是的!我自己试过了,但逻辑似乎太复杂了。
-
永远不要使用非常量
char *指向字符串文字。这是 C 还是 C++?答案会大不相同。 -
“是!”首先展示合理的代码/方法
-
@chris 感谢您的意见。但是你能不能看看你能不能为此想出一个算法?这是相当复杂的。
-
感谢大家的回答!有很多正确的答案,但我会接受一个适合我的。请原谅我昨天粗鲁的回答,当然这里有很多聪明人。再次感谢! @AndrewBarber
标签: c++ c string strtok strtol