slu*_*ugo 19 c++ string compare
我认为如果我在c ++中使用诸如">"和"<"之类的运算符来比较字符串,那么它们会按字典顺序对它们进行比较,问题是这只会在我的计算机中有效.例如
if("aa" > "bz") cout<<"Yes";
Run Code Online (Sandbox Code Playgroud)
这将不打印,这就是我需要的,但如果我输入
if("aa" > "bzaa") cout<<"Yes";
Run Code Online (Sandbox Code Playgroud)
这将打印"是",为什么会发生这种情况?或者我是否应该使用其他方式来按字典顺序比较字符串?
izo*_*ica 25
比较std::string像那样会起作用.但是,您正在比较字符串文字.要进行比较,您需要使用它们初始化std :: string或使用strcmp:
if(std::string("aa") > std::string("bz")) cout<<"Yes";
Run Code Online (Sandbox Code Playgroud)
这是c ++风格的解决方案.
或者:
if(strcmp("aa", "bz") > 0) cout<<"Yes";
Run Code Online (Sandbox Code Playgroud)
EDIT(感谢Konrad Rudolph的评论):实际上在第一个版本中,只有一个操作数应该被显式转换,所以:
if(std::string("aa") > "bz") cout<<"Yes";
Run Code Online (Sandbox Code Playgroud)
将再次按预期工作.
您正在比较类型为 的“原始”字符串char const *。
以下内容基本上等同于您的示例:
char const * s1 = "aa";
char const * s2 = "bz";
if ( s1 > s2 ) cout<<"Yes";
Run Code Online (Sandbox Code Playgroud)
这是比较指针(字符串的内存地址),而不是内容。
@izomorphius 提出了一些很好的解决方案。