请问C++中两个字符串的大小是怎样比较的?
5个回答
展开全部
如果是std::string的话,可以直接用关系符号,例如小于号(<),比较。
如果是传统的C字符串(const char[])的话,和C语言一样,调用strcmp比较,小于返回负数,大于返回正数,等于返回0。
例如
#include <cstring>
#include <iostream>
#include <string>
int main()
{
std::string s = "abc";
std::string t = "def";
const char u[] = "ghi";
const char v[] = "jkl";
std::cout << s << (s < t ? "<" : ">=") << t << std::endl;
std::cout << u << (std::strcmp(u, v) ? "<" : ">=") << v << std::endl;
return 0;
}
输出是
abc<def
ghi<jkl
注意无论用哪种方法,顺序规则都是字典规则(lexicographical order)。也就是:
从前往后,逐位比较,第一个不同的字符,按照char的顺序比较(例如字母a小于字母b)
如果第一个字符串是第二个字符串的子列,例如“abc”和“abcde”,则前者小于后者
空字符串小于其它所有字符串
当且仅当字符串长度和每个位置上字符都相同,字符串相等
字典规则示例:
以下程序给字符串排序{ 01, 1, 0, 0000, 10, 100 } 从小到大排序
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::vector<std::string> vec { "01", "1", "0", "0000", "10", "100"};
std::sort(vec.begin(), vec.end());
for (auto elem : vec)
std::cout << elem << " ";
return 0;
}
输出是
0 0000 01 1 10 100
注意按照字典规则,0000排在1前面,那个说先看字符串长度的答案纯属误人子弟。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
strcmp(str1,str2);
如果str1比str2大,则上表达式>0,等则=0,小则<0。
如果str1比str2大,则上表达式>0,等则=0,小则<0。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2016-01-09
展开全部
不是strcmp吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询