位置:首頁 > 高級語言 > C++教學 > C++字符串

C++字符串

C++提供了以下兩種類型表示字符串:

  • C風格的字符串

  • 用標準C++引入了string類類型

C風格的字符串:

C語言風格的字符串源自C語言中,並繼續在C++中支持。字符串實際上是一個一維是由一個空字符'\0'終止字符數組。因此,一個空值終止字符串包含包括字符串後跟空字符。

下麵的聲明和初始化創建由單詞“Hello”的字符串。要在數組的末尾持有空字符,包含字符串的字符數組的大小小於字符在字的數量多了一個“Hello”。

char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

如果按照數組初始化的規則,那麼可以寫上述聲明如下:

char greeting[] = "Hello";

以下是在C / C++以上定義字符串內存中表示:

String Presentation in C/C++

其實,不要把空字符的字符串常量的結尾。 C++編譯器自動將'\0'加在字符串的結尾,當它初始化數組。讓我們嘗試打印上麵提到的字符串:

#include <iostream>

using namespace std;

int main ()
{
   char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

   cout << "Greeting message: ";
   cout << greeting << endl;

   return 0;
}

當上述代碼被編譯和執行時,它會產生導致一些如下:

Greeting message: Hello

C++支持多種操縱空值終止字符串的函數:

S.N. 功能及用途
1 strcpy(s1, s2);
複製字符串s2到字符串s1
2 strcat(s1, s2);
連接字符串s2到字符串s1的末尾
3 strlen(s1);
返回字符串s1的長度
4 strcmp(s1, s2);
返回值為0,s1和s2是相同的; 如果s1<s2返回小於0;如果s1>s2 返回大於0
5 strchr(s1, ch);
返回一個指針,指向字符串s1中第一次出現字符ch
6 strstr(s1, s2);
返回一個指針,指向字符串s1中第一次出現的字符串s2

下麵的例子使用小部分上述功能:

#include <iostream>
#include <cstring>

using namespace std;

int main ()
{
   char str1[10] = "Hello";
   char str2[10] = "World";
   char str3[10];
   int  len ;

   // copy str1 into str3
   strcpy( str3, str1);
   cout << "strcpy( str3, str1) : " << str3 << endl;

   // concatenates str1 and str2
   strcat( str1, str2);
   cout << "strcat( str1, str2): " << str1 << endl;

   // total lenghth of str1 after concatenation
   len = strlen(str1);
   cout << "strlen(str1) : " << len << endl;

   return 0;
}

當上述代碼被編譯和執行時,它會產生導致一些如下:

strcpy( str3, str1) : Hello
strcat( str1, str2): HelloWorld
strlen(str1) : 10

C++的String類:

標準C++庫提供了支持上述所有操作字符串類的類型,另外更多的功能。我們將C++標準庫中學習,但現在讓我們先來看看下麵的例子:

在這一點上,你可能不理解這個例子,因為到目前為止,我們還冇有討論類和對象。不過可以繼續,直到你有認識上麵的麵向對象的概念。

#include <iostream>
#include <string>

using namespace std;

int main ()
{
   string str1 = "Hello";
   string str2 = "World";
   string str3;
   int  len ;

   // copy str1 into str3
   str3 = str1;
   cout << "str3 : " << str3 << endl;

   // concatenates str1 and str2
   str3 = str1 + str2;
   cout << "str1 + str2 : " << str3 << endl;

   // total lenghth of str3 after concatenation
   len = str3.size();
   cout << "str3.size() :  " << len << endl;

   return 0;
}

當上述代碼被編譯和執行時,它會產生導致一些如下:

str3 : Hello
str1 + str2 : HelloWorld
str3.size() :  10