Это та задача, для которой scanf
и компания действительно сияют.
char first_string[33], second_string[129];
sscanf(input_string,
"%32s%*[^\"]%*c%128[^\"]%*c %d %d %d %d",
first_string,
second_string,
&first_int,
&second_int,
&third_int,
&fourth_int);
Возможно, вы захотите сделать это в операторе if
, чтобы вы могли проверить возвращаемое значение, чтобы сообщитьВы, сколько из этих полей преобразовано (например, вы знаете, сколько целых чисел вы прочитали в конце).
Редактировать: возможно, было бы полезно какое-то объяснение.Давайте разберем, что:
% 32s читает строку до первого пробела (или 32 символа, в зависимости от того, что произойдет раньше).
% * [^ \ "] игнорирует ввод до первого "
.
% * c игнорирует еще один байт ввода (сама цитата)
% 128 [^ \ "] читает строку в кавычке (т. Е. До следующего символа кавычки).
% *c Игнорирует закрывающую кавычку% d Читает целое число (которое мы делали четыре раза).
Пробел перед каждым %d
действительно не нужен - он пропускает пробел, но без пробела, %d
в любом случае пропустит первые пробелы.Я включил их просто, чтобы сделать его немного более читабельным.