Что бы я сделал, это просканировал весь ввод и поработал с этим потом.
#include <stdio.h>
#include <stdlib.h>
int main()
{
// scan the input matrix
int a, b;
char input[256];
scanf("%dx%d:%256[^\n]", &a, &b, input);
int mat[a][b];
// populate matrix:
char* p = input;
int i = 0;
while (p != input + 256)
{
// scan until the character is not a separator
if (*p == '{' || *p == '}' || *p == ',')
{
++p;
}
else
{
int n;
sscanf(p, "%d", &n);
mat[0][i] = n;
++i;
// scan until we find a separator character
while (p != input + 256 && (*p != '{' && *p != '}' && *p != ','))
{
++p;
}
if (i >= a*b)
break;
}
}
printf("your matrix:\n");
for (i = 0; i < a*b; ++i)
{
if (i % b == 0)
printf("\n");
printf("%d ", mat[0][i]);
}
printf("\n");
return 0;
}
Пример ввода и вывода:
Вход:
3x2:{{a, b},{c, d},{e, f}}
Вывод:
a b
c d
e f
, где a, b, c, d, e и f - числа (ну, целые числа).
Однако это может быть не элегантным решением, но оно делает то, о чем вы просили.
По крайней мере, оно может дать вам некоторые идеи. Надеюсь, что это может помочь.
Примечание:
При индексации массива я использовал один индекс i
. Вы можете сделать это, потому что подобные массивы все равно хранятся в одномерном массиве. Однако это только моя лень. Не стесняйтесь исправлять это.
Если это не то, что вы имели в виду, или я допустил некоторые ошибки, не стесняйтесь исправлять меня. Возможно, что-то неправильно понял.