为什么"测试"来之前" paul"在词典中比较

时间:2016-10-06 08:17:02

标签: c++

我正在尝试对字符串数组进行排序。我正在做一些测试,我找到了一些我没想到的东西。我无法解释。

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
}

这显然不是完整的代码,不想迷失在细节中

1 个答案:

答案 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"}) { /* ... */ }