字元指針、字元數組不能直接比較
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