您的位置:首页 > 其它

字符串比较大小的principle 、ASCII码和字符串string

2016-09-07 00:32 211 查看
http://www.cnblogs.com/aduck/articles/2246168.html 

换行符的ASCII码是: 10,C语言用'\n'表示。回车符的ASCII码是: 13,C语言用'\r'表示。0是48   A65 a 97      空格 3

#include<iostream>  //代码1 表示
#include<string>
using namespace std;
int main()
{
//string max = NULL;//错误
string max1 = "";
string max2 = " ";
printf("%d\n", max1.size());//0
printf("%d\n", max2.size());//1
printf("%d\n", sizeof(max1));//28  一般是4  vs2013是28
printf("%d\n", sizeof(max2));//28  一般是4  vs2013是28
}

#include<iostream>  //代码1 表示

#include<string>

using namespace std;

int main()

{
string max = "0";//48
string max1 = "";//0
string max2 = " ";//32
string max3 = "a";//97
string max4 = "-1";//45
string max5 = "-3";//45
string max6 = "-12";//45 负数全是45(c++)
string max7 = "-26";//45
string max8 = "12";//49 等价于1
max.c_str();
// string max3 =null;
printf("%d,%d,%d,%d\n", max,max1,max2,max3);
printf("%d,%d,%d,%d\n", max.c_str(), max1.c_str(), max2.c_str(),
max3.c_str());
printf("%d,%d,%d,%d,%d\n", max[0], max1[0], max2[0], max3[0], max4[0]);
printf("%d,%d,%d,%d,%d\n", max.c_str()[0], max1.c_str()[0], max2.c_str()[0],
max3.c_str()[0], max4.c_str()[0]);

printf("%d,%d,%d,%d\n", max5[0], max6[0], max7[0], max8[0]);
printf("%d,%d,%d,%d\n", max5.c_str()[0], max6.c_str()[0], max7.c_str()[0], 
max8.c_str()[0]
);
char c = '-1';  //49
char c1 = '-2';// 50 取绝对值

char c2 = '-100';//48
char c3 = '-114';//52  取绝对值对10求余数
printf("%d,%d,%d,%d\n",c,c1,c2,c3);

}

//结果

//6695056, -859045840, -858993460, -858993460  //随机数字

//4980076, 4980040, 4980004, 4979968  //随机数字

//48, 0, 32, 97, 45

//48, 0, 32, 97, 45

//45, 45, 45, 49

//45, 45, 45, 49

//49, 50, 48, 52

//请按任意键继续. . .. .
https://social.microsoft.com/Forums/es-ES/66a069ec-bce7-4952-8bc1-b7d0145792be/string-?forum=visualcshartzhchs http://wenwen.sogou.com/z/q326415606.htm http://bbs.csdn.net/topics/120041459
string比较大小的原理(同c语言字符串的比较):

是首字母的ASCII码,如果首字母相同再比较第二个字母,以此类推。举例来说字符串abstract小于board。

比较的时候,从字符串左边开始,一次比较每个字符,直接出现差异、或者其中一个串结束为止。
比如ABC与ACDE比较,第一个字符相同,继续比较第二个字符,由于第二个字符是后面一个串大,所以不再继续比较,结果就是后面个串大。
再如ABC与ABC123比较,比较三个字符后第一个串结束,所以就是后面一个串大。
所以,长度不能直接决定大小,字符串的大小是由左边开始最前面的字符决定的。
http://zhidao.baidu.com/link?url=mwgLd1SF5fpBvMDLklFdK7-XAzPjqM61WvhKojdJxniWAPkfUxVyV4KmtcrLPeWqnFFKNSTZNX4ovx0eApEXNq
#include<iostream>
#include<string>
using namespace std;
int main()
{
string max = "2";//48
string max1 = "1234";
printf("%d\n", max > max1 ? 1 : 0);
}

//结果
1
所以字符串比较大小是优先级比较,左大则大。而不是以长度为准。所以如果长度相同的数字可以直接用字符串比较大小了,但必须都是正数。上一篇日志时间搓算法就是用的这个原理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: