字符指针、字符数组不能直接比较
strcmp() 对两个字符串进行大小写敏感的比较
strcmpi() 对两个字符串进行大小写不敏感的比较
stricmp() 同strcmpi()
strncmp() 对两个字符串的一部分进行大小写敏感的比较
strnicmp() 对两个字符串的一部分进行大小写不敏感的比较
(此部分复制网上部分,见谅,大家重复太多啦)
STL标准库中的std::string重载了==运算符
使得string可以直接和const char* (C风格字符串)直接比较
St.replace()//替换
St.size();//返回长度(不包含空字符)
St2.empty()//检查是否是空
//复制两个字符串
String st3(st);
St2=st3
//比较是否相等
If(st2==st3){….}
/两个字符串连接成第三个字符串
String s1(“hello,”);
String s2(“world!”);
String s3=s1+s2;
//或者,直接加到s1
S1+=s2;
//可以把一个c风格的字符串转换成string类对象
Const char *pc=”a try”;
String s1=pc;//ok
//但,反向的转换不能自动执行
Char *str=s1;//error
为实现这种转换必须显示调用名为c_str()
//几乎正确的
char *str=s1.c_str();
但为了防止字符数组被程序直接处理,c-str()返回的一个指向常量数组的指针:const char*,str被定义为非常量指针,所以违例。正确是:
Const char *str=s1.c_str();//ok
St.compare()//比较
例子:
char buf[] = "Geooo";// 其末尾还包括了一个\0, 是一个数组,可以改变数组中保存的内容( 字符数组 ) char* buf1 = "Geooo";// 字符指针指向的是一个字符串常量的首地址,可以改变它指向不同的字符串,但不能改变所指的字符串常量(字符指针) string buf2 ="Geooo";(字符串)// 新的C++标准 C++11里面规定std::string一定是以'\0'结尾 就看你的编译器有没有实现新标准了 char buf3[] = {'G','e','o','o','o'};( 字符数组) char buf4[] = {'G','e','o','o','o','\0'};( 字符数组)等价于buf[]
bool ibool=strcmp(buf2.c_str(), "Geooo");//buf,buf1,buf2,buf4用strcmp比较都是相等,返回0 bool ibool = strcmp(buf, buf3)//1 bool ibool = strcmp(buf, buf4)//0 bool ibool = strcmp(buf3, buf4)//1
if (buf == "Geooo")//不等 if (buf1 == "Geooo")//相等 if (buf2 == "Geooo")//相等 if (buf3 == "Geooo")//不等 if (buf4 == "Geooo")//不等
if (buf == buf2)//相等 if (buf1 == buf2)//相等 if (buf == buf1)//不等 if (buf == buf4)//不等
cout << strlen(buf);//5 cout << sizeof(buf);//6, 字符串数组,编译自动在后面加上了"\0"结束符
cout << strlen(buf1);//5 cout << sizeof(buf1);//4,指针的字节数
cout << strlen(buf2.c_str());//5 cout << sizeof(buf2);//28,string的实现在各库中可能有所不同,但是在同一库中相同一点是,无论你的string里放多长的字符串,它的sizeof()都是固定的 cout << sizeof(buf2.c_str());//4,指针的字节数
cout << strlen(buf3);//19,不定, 原来strlen在计算数组长度的时候是遇到‘\0’时计算就停止,如果不在字符数组后面加上‘\0’,那么strlen就会一直计算下去,知道遇到内存中的'\0',才停止计算。 cout << sizeof(buf3);//5,字 符数组,编译器不会再后面加"\0"结束符
cout << strlen(buf4);//5 cout << sizeof(buf4);//6
buf[0] = 'l';//可以, 由字符串常量初始化的数组是可以修改的 buf1[0] = 'l';//错误,字符指针指向的是一个字符串常量的首地址 buf2[0] = 'l';//可以 buf3[0] = 'l';//可以
cout<<sizeof(buf3) / sizeof(buf3[0]);//5
char buf5[] = {'Goo','e','o','o','o','\0'}; cout<<sizeof(buf5) / sizeof(buf5[0]);//6
char* buf6[] = {"Goo","e","o","o","o","\0"}; 指针数组 cout<<sizeof(buf6) / sizeof(buf6[0]);//6
char* buf7[] = {"Goo","e","o","o","o"}; 指针数组 cout<<sizeof(buf7) / sizeof(buf7[0]);//5
字符串与字符数组
对字符串指针方式,char *ps=”C Language”;
可以写成char *ps;ps=”C Language”;
而对于数组方式,char st[]={”C Language”};
不能写成char st[20];
St={”C Language”};
只能对字符数组的各元素逐个赋值。
指针数组和数组指针的区别
int* a[4] 指针数组
表示:数组a中的元素都为int型指针
元素表示:*a[i] *(a[i])是一样的,因为[]优先级高于*
int (*a)[4] 数组指针
表示:指向数组a的指针
元素表示:(*a)[i]
字符指针如何判断字符串结束
int i = 0;
while (*buf1 != NULL)
{
buf1++;
i++;
}
cout << i << endl;//5