Вы добирались туда, и хотя я согласен с bruno и использованием std::vector
, используя ваш массив базового типа, вы можете сделать:
#include <iostream>
#include <sstream>
#include <string>
#define MAXN 100
int main (void) {
std::string inputstr, function;
int arr[MAXN], i, n = 0, para1, para2;
std::stringstream ss;
if (!getline (std::cin, inputstr)) { /* validate read of line */
std::cerr << "user canceled or input error.\n";
return 1;
}
ss << inputstr; /* transfer line to stringstream */
while (n < MAXN && (ss >> arr[n])) /* read ints until function */
n++;
ss.clear(); /* clear failbit */
if (!(ss >> function)) { /* validate read of function */
std::cerr << "error: no function read.\n";
return 1;
}
if (!(ss >> para1) || !(ss >> para2)) { /* validate read of 2 params */
std::cerr << "error: failed to read 2 parameters.\n";
return 1;
}
/* output function (para1, para2) followed by integer values */
std::cout << '\n' << function << "(" << para1 << ", " << para2 << ")\n";
for (i = 0; i < n; i++)
std::cout << " " << arr[i];
std::cout << '\n';
}
Независимо от того, используете ли вы vector
или int arr[]
, подход тот же.Считайте int
значения, сохраняя их, пока не произойдет сбой чтения на function
.ss.clear();
очистить failbit
, а затем прочитать function
и para1
и para2
, подтверждая успешность каждого чтения.
Пример использования / Вывод
$ ./bin/fnparams
111 222 otherFunc 333 444
otherFunc(333, 444)
111 222
или
$ ./bin/fnparams
1 22 333 4444 55555 secretFunc 66 777
secretFunc(66, 777)
1 22 333 4444 55555