字符串比较函数string::compare可靠吗,用于确定字母顺序?

11

简单来说,如果输入始终处于相同的情况(这里是小写),并且字符始终为ASCII,那么是否可以使用string :: compare可靠地确定两个字符串的字母顺序?

因此,对于stringA.compare(stringB),如果结果为0,则它们相同;如果结果为负数,则stringA按字母顺序排在stringB之前;如果结果为正数,则stringA按字母顺序排在stringB之后?

5个回答

12
根据cplusplus.com的文档,该成员函数将返回0,如果所有比较的内容中的字符都相等;如果第一个不匹配的字符在对象中比比较字符串小,则返回负值;否则,返回正值。因此,它将按ASCII顺序排序字符串,在相同情况下,英文字符串(没有变音符号或其他扩展字符)按字母顺序排序。请注意,保留了html标签。

如果我没记错的话,撇号和连字符不是变音符号,对吧? - MPelletier
没错,它们将按照ASCII顺序排序。 - Moishe Lettvin
1
通常在字母排序时,不考虑标点符号来确定顺序,因此应该从字符串中删除标点符号。无论如何,撇号和连字符都在ASCII字母范围之下。 - James McNellis
+1 提到变音符号的问题。string::compare 仅适用于较低的 ASCII(0-127)。 - Matthieu M.
正如 @JamesMcNellis 所指出的,它只适用于相同大小写的字符串。 - user267817
正如我在答案中所说的“相同情况”。按ASCII顺序:ASCII 'A' < ASCII 'a'。 - Moishe Lettvin

4

只要两个字符串中的所有字符都是相同的大小写,并且两个字符串仅包含字母,这将起作用。

compare是一个成员函数,因此您需要像这样调用它:

stringA.compare(stringB);

2
在C++中,string是使用默认参数实例化模板类basic_string的结果:basic_string<char, char_traits<char>, allocator<char> >。在basic_string模板中,比较函数将使用char_traits<TChar>::compare函数来确定结果值。
对于std::string,顺序将是实现(编译器)的默认字符代码的顺序,通常是ASCII顺序。如果您需要不同的顺序(比如想要将{ a, á, à, â }视为等效),则可以使用自己的char_traits<>实现实例化basic_string,并提供不同的compare函数指针。

你有这方面的例子吗? - Marcello90

0

,

如果比较的字符串相等,则该成员函数返回0;如果第一个不匹配的字符在对象中比比较字符串小,则返回负值;如果在对象中比比较字符串大,则返回正值。

对于字符串对象,字符比较的结果仅取决于其字符代码(即ASCII代码),因此结果具有一定的字母或数字排序意义。


0

C和C++语言的规范保证了词法顺序,'A' < 'B' < 'C' ... < 'Z'。小写字母同样如此。

文本数字的排序也是有保证的:'0' < ... < '9'。

在处理多种语言时,许多人会创建一个字符数组。该数组将被搜索以查找字符。与比较字符不同,比较索引。


3
C++语言标准 没有 指定执行字符集,因此,语言标准不能保证字母的顺序,并且这取决于具体实现。 - James McNellis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接