【问题标题】:What is the difference between string1 == string2 and your own for-loop comparison?string1 == string2 和你自己的for循环比较有什么区别?
【发布时间】:2020-06-10 04:30:11
【问题描述】:

假设你想在 C++ 中比较两个字符串,看看它们是否相同。除了少打字之外,以下有什么区别吗?一个比另一个快,有没有比这里包含的更好的方法来比较字符串?

版本 A: if( string1 == string2 ) { return true; }

B 版:

// Check for equal length, then...
for( int i = 0; i < string1.length(); ++i ) {
    if( string1[i] != string2[i] ) { return false; }
}
return true;

【问题讨论】:

  • 我怀疑 C++ 字符串索引使用 size_t 而不是 int,这对于 long 字符串来说可能太窄了。

标签: c++ string-comparison


【解决方案1】:

以下有什么区别吗?

是的。您的代码不会检查字符串的长度,因此如果第一个字符串比第二个字符串长,您最终可能会读到第二个字符串的末尾。如果第一个字符串是第二个字符串的正确前缀,则您的代码将返回错误的结果。

一个比另一个快吗?

使用标准库函数可能与您自己的函数相同或更快,因为可以更好地优化标准库函数。例如,== 运算符可能使用std::memcmp 一次比较多个字符。

有没有更好的方法来比较字符串而不是包含的内容 在这里?

不,不是真的。 string1 == string2 可能在简单性和速度方面都非常出色。

【讨论】:

  • 好答案。 Visual Studio 实际上确实使用memcmp 作为operator== 的实现
  • 糟糕。是的。 memcmp
猜你喜欢
  • 1970-01-01
  • 2019-10-01
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 2013-11-14
  • 1970-01-01
  • 2016-02-08
相关资源
最近更新 更多