C - игнорирование пробелов с помощью sscanf

Я пытался понять это, и у меня есть работа, но я просто хотел проверить, не упускаю ли я что-то очевидное. По сути, у меня есть ряд команд, которые следуют определенным правилам. Все, что содержит цифру, букву ASCII или определенные символы, является токеном, а ‹,>,|,&&,; и т. д. являются разделителями. Мне нужно иметь возможность сказать, какой из них я только что нашел, и сохранить их в массиве.

Итак, в цикле while у меня есть

a = sscanf (cp, "%[0-9a-zA-Z!@:/-.,^+% ]", str);

Я включил пробел в качестве одного из символов для поиска, так как не мог найти другого способа. Вместо этого, после того как я получу слово (плюс возможные пробелы), я вызываю

 delimiters[] = " ";
 token = strtok(str, delimiters);

Который должен удалить пробел, оставив мне только токен (а если пробела не было, это просто не меняет слово). Мне просто любопытно, есть ли способ сделать что-то подобное с sscanf, так как я знаю, что он уже разбивает строки, если между ними есть пробел, но если вы вызываете его снова и он видит пробел, он просто не читает что-либо.

Если нет, то тоже хорошо. Это просто прослушивало меня весь день.


person user1777900    schedule 17.01.2013    source источник
comment
возможный дубликат игнорирования пробелов с помощью sscanf в C   -  person Mahmoud Al-Qudsi    schedule 17.01.2013


Ответы (1)


Вы можете изменить свой формат на

a = sscanf (cp, " %[0-9a-zA-Z!@:/-.,^+%]", str);

Ведущий ' ' в формате пропускает [возможно, пустую] последовательность пробельных символов, а затем вы сканируете последовательность допустимых токен-символов без пробелов.

person Daniel Fischer    schedule 17.01.2013
comment
Но разве это не означает, что перед моей строкой должен быть пробел? Таким образом, даже если бы между токенами и разделителями не было пробелов, это все равно работало бы? (извините, я бы проверил сам, но сейчас я с мобильным телефоном) - person user1777900; 17.01.2013
comment
@user1777900 user1777900 это означает пропустить все пробелы перед вашей строкой, если они есть. - person WhozCraig; 17.01.2013
comment
@user1777900 user1777900 Последовательность пробелов, которые занимает пробел в строке формата, может быть пустой. Если пробела нет, psace соответствует пустой последовательности маркеров пробела. - person Daniel Fischer; 17.01.2013