Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何比较字符的字母顺序是高还是低?_C++_Char_Singly Linked List_Alphabetical - Fatal编程技术网

C++ 如何比较字符的字母顺序是高还是低?

C++ 如何比较字符的字母顺序是高还是低?,c++,char,singly-linked-list,alphabetical,C++,Char,Singly Linked List,Alphabetical,和标题差不多。我正在写一个链表,我需要一个按字母顺序排序的函数,我很困惑。我不确定这是怎么出现的,但我不知道该怎么做,只知道创建自己的函数,列出整个字母表并从头开始比较字母的位置 有什么简单的方法可以做到这一点吗 为清晰起见,请编辑: 我有一个类对象的线性链接列表,每个类对象都有一个字符名,我正在编写一个函数来比较列表中每个对象的名称,按字母顺序查找最高的对象,然后按字母顺序查找下一个对象,等等,在我进行时将它们链接在一起。我已经有一个函数可以对int字段执行此操作,所以我只需要重写它来比较字母

和标题差不多。我正在写一个链表,我需要一个按字母顺序排序的函数,我很困惑。我不确定这是怎么出现的,但我不知道该怎么做,只知道创建自己的函数,列出整个字母表并从头开始比较字母的位置

有什么简单的方法可以做到这一点吗

为清晰起见,请编辑:

我有一个类对象的线性链接列表,每个类对象都有一个字符名,我正在编写一个函数来比较列表中每个对象的名称,按字母顺序查找最高的对象,然后按字母顺序查找下一个对象,等等,在我进行时将它们链接在一起。我已经有一个函数可以对int字段执行此操作,所以我只需要重写它来比较字母字符之间的不等式,其中a是最大的,z是最小的

事后看来,这可能比我想象的要重要得多

我认为我已经得到的几个答案应该是有效的,所以一旦我得到了一个有效的答案,我会立即返回并选择一个最佳答案

我也在使用g++和unity

 #include <stdio.h>
 #include <ctype.h>

 void main(void) {
  char a = 'X', b = 'M';
  printf("%i\n", a < b);
  printf("%i\n", b < a);

  printf("%i\n", 'a' < 'B'); 
  printf("%i\n", tolower('a') < tolower('B'));
 }

字符仍然是数字,因此可以进行比较。大写字母和小写字母都按顺序排列,大写字母在小写字母之前。使“Z”小于“a”。请参阅。

我猜您的列表包含char*作为数据,最好包含s作为数据。如果列表由后者组成,您可以简单地使用重载的std::string运算符进行排序,正如您可以从这个ASCII表中看到的那样,所有字母数字字符按照正确的字母顺序显示,与它们的实际值有关:

有什么简单的方法可以做到这一点吗


是的,比较字符值将提供按字母顺序排序的功能。

我认为在一般情况下,最好的方法是使用std::char\u traits:

char a, b;
std::cin >> a >> b;
std::locale loc;
a = std::tolower(a, loc);
b = std::tolower(b, loc);

std::cout << std::char_traits::compare(&a, &b, 1u);

但在许多常见情况下,您可以简单地将字符与其他整数类型进行比较。

下面的内容是否足够?首先将所有内容转换为上一级

class compareLessThanChar{
public:
    bool operator()(const char a, const char b)
    { return toupper(a) < toupper(b); }
}


std::multiset<char, compareLessThanChar> sortedContainer;

为什么不仅仅是a>b?字符按字母顺序出现在它们的枚举中。但您甚至不必担心这一点,可以使用strcmp和stricmp来比较字符串。这比自己做要快。@Quilliom:不是这样。按字母顺序,“a”代表“B”。@BenjaminLindley,这取决于编码,但是是的。当比较不同的情况时,这就成了一个全新的问题。这就是stricmp的目的。这就是你的想法吗?你能修改你的代码来处理大小写吗?不是对你发脾气,只是好奇。怎么处理?比如,不区分大小写?@JayKominek同样,本杰明·林德利(Benjamin Lindley)提出了我的答案和其他各种评论。我不知道你想说什么,但我要指出的是,我并没有声称ASCII按字母顺序排列数值。事实上,我注意到大写字母在小写字母之前。@JayKominek是的,可能是为了处理区分大小写的代码。不是必须的,只是一个很好的投票!回答很好,完全忘记了比较的特点。你也可以用它来比较C类字符串。我在这里重复我自己,但不,这不是真的。按字母顺序,“B”不在“a”之前。@BenjaminLindley是的,我看到了你的评论,说得好。我们必须规范化字母顺序的含义。构造两个临时字符串来进行比较。。。过早悲观?对于初学者来说,这是个不错的建议,但只需要左手边的参数是第二个标记为9的重载的字符串,值得一提的是strcmp是一个更快但更神秘的选项。希望初学者尽可能避免使用C-style/ASCIIZ字符串……@TonyD谢谢,的确,你是对的,我添加了strcmp函数。我肯定会避免使用temp方法。它不会返回std::char_traits::compares1、s2、std::minstrlens1、strlens2;Bugy-首先返回一个负数,0或正数,以小于,等于和更大,所以你想测试< 0,并且Strink的min意味着一个字符串等于它的任何主要组件,你需要通过返回StrnLLHS< StrnRr.s来处理比较=0的情况。但事实上,你必须进行测试。实际上,字符串将与前导组件进行比较,我现在意识到strcmp.Re buggy的情况并非如此——我的意思是,从返回str1return std::strcmp(s1, s2);
return std::char_traits<char>::compare(s1, s2, std::min(std::strlen(s1), std::strlen(s2)));
return std::string(s1) < std::string(s2); // here s1 and s2 are C-strings
return c1 < c2; // returns true whenever c1 is before c2 in the alphabet
char a, b;
std::cin >> a >> b;
std::locale loc;
a = std::tolower(a, loc);
b = std::tolower(b, loc);

std::cout << std::char_traits::compare(&a, &b, 1u);
class compareLessThanChar{
public:
    bool operator()(const char a, const char b)
    { return toupper(a) < toupper(b); }
}


std::multiset<char, compareLessThanChar> sortedContainer;