C - Сравнение числовых строк
Вопрос
Из профессионального любопытства, каков самый безопасный / самый быстрый / самый эффективный способ сравнить две полностью числовые строки в C?
родовое словоРешение
strcmp ()
, так как он не требует числовых преобразований. Но в этом случае вам нужно убедиться, что один из них хранит строку, содержащую только числовые символы.
Также вы можете создать код кода для строки
< sizesEDIT1
Как уже указывалось другими относительно начальных нулей, вы можете вручную просканировать начальные нули и вызвать memcmp ()
или strcmp ()
, передав указатель на первую ненулевую цифру.
< sizesEDIT2
Приведенный ниже код говорит о том, что я пытаюсь сказать. Это только для целых чисел, а не для чисел с плавающей запятой.
родовое словоДля чисел с плавающей запятой конечные нули после десятичной запятой следует вырезать вручную.
Или сделайте все вручную.
< sizesEDIT4
Я также хотел бы, чтобы вы взглянули на этот код для чисел с плавающей запятой. Это обнаружит ведущие нули перед десятичным и конечные нули после десятичного разделителя. Например
memcmp ()
и 00000000000001.10000000000000
будут генерировать кодовый код для приведенного ниже кода
Перед использованием необходимо пройти тестирование.
Другие советы
str(n)cmp
- самый быстрый и безопасный.
Если вы хотите, чтобы они были идентичными, strncmp
будет самым быстрым и безопасным, поскольку он может выполнять прямое сравнение без каких-либо преобразований.Кроме того, он считается более безопасным, чем генерируемый код.
Однако, если вы хотите, чтобы strcmp
и 00
были равны, или чтобы вы могли представлять одно и то же число немного по-разному, вам потребуется использовать 0
.
На мой взгляд, "самым безопасным" способом было бы преобразовать оба аргумента в целые числа, а затем протестировать, так как таким образом вы избежите потенциальной проблемы с начальными нулями.Однако, вероятно, это не самый быстрый и не самый эффективный метод.
Вы можете просто использовать следующее:
if (strcmp ("123", "123")== 0)
{
родовое слово}
еще
{
родовое слово}
На мой взгляд, это должно сработать.
Я предлагаю такой способ для целых чисел:
родовое слово