首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C++中比较base36值?

如何在C++中比较base36值?
EN

Stack Overflow用户
提问于 2015-08-20 12:52:59
回答 2查看 116关注 0票数 0

众所周知,对于C风格的字符串比较,该值依赖于每个字符的ASCII值,并且只使用strcmp函数进行比较。我搞不懂std::string的比较依赖于什么?

虽然我已经在谷歌上搜索过了,我仍然没有找到答案。

另外,如果字符串都是base36字符串,并且都是小写的,我可以直接按字符串比较它们的值吗?或者我应该使用strtol函数将它们转换为长变量?哪种方法更好?

EN

回答 2

Stack Overflow用户

发布于 2015-08-20 13:51:37

我们都知道,在C风格的字符串比较中,值取决于每个字符的ASCII值……“不幸的是已经错了。例如,对于UTF-8字符串和各种形式的排序,这是完全不正确的。

然后,"...and只是使用strcmp函数进行比较。“也是错误的,因为C样式的字符串没有固有的比较方式,而是依赖于编码和区域设置的多种方式。您可以使用strcmp()进行逐个字节的相等比较,但这并不总是能得到预期的结果。

要回答您的问题,std::string使用的是什么,这很简单。std::stringstd::basic_string模板的特殊化,它将比较委托给它的char_traits模板参数。此参数通常使用memcmp()。它不可能使用strcmp(),因为除了C样式字符串之外,std::string还可以包含空字符,但strcmp()将仅限于这些字符。

票数 2
EN

Stack Overflow用户

发布于 2015-08-20 13:32:40

字符串比较依赖于‘ASCII值’,其方式与strcmp完全相同。

对于base36比较,简单的字符串比较( strcmp或std:: string )不起作用,因为"00123“和"123”在表示base36整数时是相等的,但它们作为字符串进行了不同的比较。由于整数溢出,strtol也不能很好地工作。相反,您可能应该编写自己的比较例程,去掉前导零,然后比较长度,最后对长度相等的字符串进行字符串比较。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32109780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档