【问题标题】:Convert casual string to int in C [closed]在C中将休闲字符串转换为int [关闭]
【发布时间】:2019-05-24 18:08:21
【问题描述】:

作为标题,我需要将一个随意的字符串(如“elephant”)转换为 int 类型。我已经了解了 stdlib.h 库的 atoistrtol 函数。但是,这不适用于休闲字符串(返回值始终为 0)。有这样的功能吗?

【问题讨论】:

  • 嗯。那么大象的int 值是什么?
  • @EugeneSh。 0x1F418 显然。
  • @tadman 哈哈。我没有看到它来:)
  • @xing 甚至 strtoll(), "elephant" 给出了1143700050233 但即使这样对于141987995361270070000 的 "tyrannosaurus" 来说也不够大。
  • 您是否正在寻找一个简单的字符串散列函数?可能像 FNV?

标签: c string int


【解决方案1】:

atoi 所做的是将“整数字符串”转换为整数值。这与itoa相反。

字符串"elephant" 没有数字含义。如果您想将其编码为int,则需要一个 8 字节整数和一个endian convention。任何更长的字符串都需要拆分为多个整数值。

显然它的实用性是相当可疑的,因为它比字节数组有什么优势?

所以简短的回答是没有函数,因为没有将任意字符串编码为整数。请记住,在大多数平台上只有 232 或 264 个可能的整数值,但 2236 个可能的字符串值在典型的现代计算机上。

您不能将 268719476736 个可能的字符串值(例如 8GB)映射为 264 个整数。

如果您确实想将任意单词映射到数字,则需要一个查找表(例如字典),为每个可能的输入单词分配一个预定义的整数值。由于不存在这样的单词列表,详尽的列表太大了,并且没有关于大象有多少个标准,尽管表情符号,这是你必须自己制作的东西。

【讨论】:

  • @EugeneSh。我的意思是另一个。编辑。
【解决方案2】:

您始终可以使用strncmp 比较字符串。

类似

int strParse(char * str){   
  if(strncmp(str,"elephant",8) == 0) return 42;
  return 0;
 }

...等等。请记住,这需要时间。

【讨论】:

  • 喜欢... 每个“休闲”字符串?
  • 喜欢他申请中的每个人吗?也许?取决于他有多少。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-11
  • 1970-01-01
  • 2015-08-02
  • 2019-07-16
  • 2013-11-21
  • 1970-01-01
相关资源
最近更新 更多