[英]Input of varying format in C
我目前正在尝试弄清楚如何处理这种格式的输入: [int_1,...,int_N]
其中N是间隔<1,MAX_N>中的任何数字(例如#define MAX_N 1000
)。 我现在所拥有的是fgets
将其获取为字符串,然后使用一些循环和sscanf
将其保存为int数组。
我的解决方案是IMO,不是最优雅和功能最全的,但这是因为我实现了它。 所以我想问的是你们将如何解决这个问题,因为我已经没有足够的想法了。
编辑:添加代码为字符串-> int数组
int digit_arr[MAX_N];
char input[MAX_N];
//MAX_N is a constant set at 1000
//Brackets and spaces have been removed at this point
for (i = 0; i < strlen(input); i++) {
if(sscanf(&input[i+index_count],"%d,", &digit_arr[i]) == 1){
while (current_char != ',') {
current_char = input[i+index_count+j];
index_count++;
j++;
if ((index_count+j+i) == strlen(input)-1){
break;
}
}
}
我的个人变体:
char const* data = input; // if input is NOT a pointer or you yet need it unchanged
for(;;)
{
int offset = 0;
if(sscanf(data, "%d,%n", digit_arr + i, &offset) == 1)
{
++i;
if(offset != 0)
{
data += offset;
continue;
}
}
break;
}
如果文本中的所有字符都被消耗了,您可能最终会退缩:
if(*data)
{
// not all characters consumed, input most likely invalid
}
else
{
// we reached terminating null character -> fine
}
请注意,我的代码本身并不包含尾随空格,您可以通过将格式字符串更改为"%d, %n
(注意添加的空格字符)来做到这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.