Чтобы найти решение (и сказать, возможно ли это даже с sscanf
), вам нужно предоставить больше информации о формате вашей строки.Невозможно получить что-либо убедительное из одного приведенного вами примера.
В вашем конкретном случае нужно знать, где заканчивается имя и начинается следующий номер.Как вы определяете это в вашем случае?Должны ли мы предполагать, что первый десятичный символ означает конец имени и начало number2
?Или это что-то более сложное?Если входная строка содержит последовательность "Tom16"
, предполагается ли имя целиком "Tom16"
или мы должны разделить его на "Tom"
и оставить 16
для number2
?
В основном,Ваш вопрос, как указано, не дает никакого значимого ответа, только случайные предложения.
Обновление: Ваше описание формата строки еще далеко от завершения, но я могу предложитьиспользование следующего спецификатора формата в sscanf
sscanf(string, "%d %[^0123456789]%d", &number1, name, &number2)
Это будет работать, предполагая, что «числа», на которые вы ссылаетесь, состоят только из десятичных цифр, и предполагая, что имя не может содержать никаких десятичных цифр.Также обратите внимание, что он не будет содержать начальный пробел в имени, но он будет включать в себя завершающий пробел.Если вы не хотите этого, вам придется самостоятельно обрезать завершающий пробел по имени.
В любом случае, возможности разбора sscanf
довольно ограничены.Как правило, они не подходят для решения проблемы, как ваша.То, что я имею выше, вероятно, лучшее, что вы можете получить из sscanf
.Если вам нужно что-то еще более сложное, вам придется анализировать вашу строку вручную, токен за токеном, вместо того, чтобы пытаться проанализировать все это в одном кадре с sscanf
.