如何在IF语句参数中比较字符串



在if函数参数中,如何比较字符串s和t?为什么条件(s>t(为真?

string s = "to be";
string t = "not " + s;              // t = “not to be”
string u = s + " or " + t;          // u = “to be or not to be”
if (s > t)                          // true: “to be” > “not to be”
cout << u;                          // outputs “to be or not to be”

std::字符串运算符comp

所有比较都是通过compare()成员函数(它本身是根据特征::compare(((:来定义的

  • 如果lhs和rhs的大小相等,并且lhs中的每个字符在rhs中都有相同的字符,则两个字符串相等位置
  • 排序比较是按照字典进行的——比较是由一个等价于std::词典对照或std::字典对照three_way(从C++20开始(

因此,简而言之,它对进行了字典比较

"to be"s > "not to be"s == true,因为在第一个位置是't' > 'n'

std::string的比较被设计为不令人惊讶,或者至少不令人惊讶。如果您坚持使用小写字母和空格,就像您的示例中一样,operator<operator>遵循字母顺序。

  • not to be
  • to be
  • to be or not to be

由于您坚持使用简单的情况,string{"to be"} > string{"not to be"},因为它们按相反的字母顺序排列。即't' > 'n'(作为字符(。

当你扩展到其他角色时,可能会有一些惊喜。例如,'Z' < 'a',因为ASCII将大写字母置于小写字母之前。尽管如此,原理仍然成立:std::string的排序是基于底层字符集的排序。查找字符串不同的第一个字符位置;字符串的顺序与该位置的字符相同。如果一个(并且只有一个(字符串在找到差异之前用完了字符,那么较短的字符串会出现在较长的字符串之前。

相关内容

  • 没有找到相关文章

最新更新