我正在尝试对字符串数组进行排序。我正在做一些测试,我找到了一些我没想到的东西。我无法解释。
DynamicArray<string> sectionName; //declaration
swap(alreadySeen[i].sectionName[j],alreadySeen[i].sectionName[i]); //usage
为什么&#34;测试&#34;不到&#34;保罗&#34;? &#39; P&#39; ASCII值低于&#39; t&#39;。它也出现在字母表中的p之前。两种情况下的字符串长度也相同。
我使用swap()按字母顺序对数组进行排序(很好地尝试)。我不能使用sort(),我需要使用swap。
更新: 在上面的例子中我使用了一个指针,但这是我的实际代码。
@XmlRootElement
public class Message {
@XmlElement
private String status;
@XmlElement
private String details;
//getters and setters
}
@XmlRootElement
public class Response extends Message {
@XmlElement
private List<Case> cases;
//getters and setters
}
@XmlRootElement
public class Case {
@XmlElement
private id;
@XmlElement
private name;
//gettersand setters
}
这显然不是完整的代码,不想迷失在细节中
答案 0 :(得分:1)
始终在启用警告的情况下进行编译。
warning: comparison with string literal results in unspecified behavior [-Waddress]
if ("test" < "paul")
^~~~~~
您不是在比较字符串,而是在比较内存地址。这是wandbox example。
为了达到你想要的目的:
如果您需要使用C风格的字符串,请使用std::strcmp
:
if(std::strcmp("test", "paul") < 0) { /* ... */ }
如果您可以使用std::string
,则只需写下:
if(std::string{"test"} < std::string{"paul"}) { /* ... */ }