Если строка не может содержать окончание квадратных скобок, вы можете абсолютно использовать sscanf()
:
int i, j;
char text[128];
if(sscanf(input, "[S{%d,%d} : %127[^]]", &i, &j, text) == 3)
{
printf("got it all!\n");
}
Для получения дополнительной информации о несколько менее известном спецификаторе преобразования [
, смотрите, например, this manual page. В основном, преобразование %[^]]
означает «все символы, кроме закрывающей квадратной скобки, это специальная форма синтаксиса с использованием как отрицание (^
) и удвоения закрывающей скобки, чтобы включить его в наборе отрицаний символов.
UPDATE Если вы на самом деле означает «в двух отдельных строк», то, конечно, выше неверно, так как он разбирает из числа в int
-типа переменных Чтобы получить пару в виде строки, использовать что-то вроде:.
char ij[32], text[128];
if(sscanf(input, "[S{%31[^}]} : %127[^]]", ij, text) == 2)
{
}
Почему downvote ? Это работает и является стандартным – cnicutar
Измените '% S' на' S', и он будет работать нормально: http://ideone.com/ ZAe1N4 (я не ответил на ваш ответ). – Crozin
+1 избили меня :) –