C++ 字串完全指南:學習基礎知識到掌握高階應用技巧

小万哥丶發表於2024-03-28

C++ 字串

字串用於儲存文字。

一個字串變數包含由雙引號括起來的一組字元:

示例

建立一個 string 型別的變數併為其賦值:

string greeting = "Hello";

C++ 字串連線

字串連線可以使用 + 運算子來實現,生成一個新的字串。

示例:

string firstName = "John ";
string lastName = "Doe";
string fullName = firstName + lastName;
cout << fullName;

在上面的示例中,我們在 firstName 後面新增了一個空格,以便在輸出時在 "John" 和 "Doe" 之間生成一個空格。然而,你也可以用引號(" "' ') 來新增一個空格:

示例:

string firstName = "John";
string lastName = "Doe";
string fullName = firstName + " " + lastName;
cout << fullName;

追加:

在 C++ 中,字串實際上是一個物件,其中包含可以對字串執行某些操作的函式。例如,你也可以使用 append() 函式連線字串:

示例:

string firstName = "John ";
string lastName = "Doe";
string fullName = firstName.append(lastName);
cout << fullName;

C++ 數字和字串

將數字和字串相加

C++ 使用 + 運算子既用於加法又用於連線。

  • 數字相加。字串連線。

如果你將兩個數字相加,結果將是一個數字:

示例:

int x = 10;
int y = 20;
int z = x + y;      // z 將是 30(一個整數)

如果你將兩個字串相加,結果將是字串連線:

示例:

string x = "10";
string y = "20";
string z = x + y;   // z 將是 1020(一個字串)

如果你嘗試將一個數字新增到一個字串中,將會出現錯誤:

示例:

string x = "10";
int y = 20;
string z = x + y;

C++ 字串長度

要獲取字串的長度,可以使用 length() 函式:

示例

string txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
cout << "txt 字串的長度為: " << txt.length();

提示:你可能會看到一些 C++ 程式使用 size() 函式來獲取字串的長度。這只是 length() 的別名。完全取決於你是要使用 length() 還是 size():

示例

string txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
cout << "txt 字串的長度為: " << txt.size();

C++ 訪問字串

你可以透過在方括號 [] 內引用其索引號來訪問字串中的字元。

以下示例列印 myString 中的第一個字元:

示例

string myString = "Hello";
cout << myString[0];
// 輸出 H

注意:字串的索引從 0 開始:[0] 是第一個字元,[1] 是第二個字元,以此類推。

以下示例列印 myString 中的第二個字元:

示例

string myString = "Hello";
cout << myString[1];
// 輸出 e

更改字串字元

要更改字串中特定字元的值,請引用索引號,並使用單引號:

示例

string myString = "Hello";
myString[0] = 'J';
cout << myString;
// 輸出 Jello 而不是 Hello

C++ 特殊字元

因為字串必須用引號括起來,C++會誤解這個字串,並生成一個錯誤:

string txt = "We are the so-called "Vikings" from the north.";

避免這個問題的解決方案是使用反斜槓跳脫字元。

反斜槓 () 跳脫字元將特殊字元轉換為字串字元:

跳脫字元 結果 描述
' ' 單引號
" " 雙引號
\ \ 反斜槓
序列 " 在字串中插入雙引號:

string txt = "We are the so-called \"Vikings\" from the north.";

序列 ' 在字串中插入單引號:

string txt = "It\'s alright.";

序列 \ 在字串中插入單個反斜槓:

string txt = "The character \\ is called backslash.";

C++ 使用者輸入字串

可以使用提取運算子 >> 在 cin 上儲存使用者輸入的字串:

string firstName;
cout << "Type your first name: ";
cin >> firstName; // 從鍵盤獲取使用者輸入
cout << "Your name is: " << firstName;

// 輸入你的名字: John
// 你的名字是: John

然而,cin 將空格(空白、製表符等)視為終止字元,這意味著它只能儲存一個單詞(即使你輸入多個單詞):

string fullName;
cout << "Type your full name: ";
cin >> fullName;
cout << "Your name is: " << fullName;

// 輸入你的全名: John Doe
// 你的名字是: John

從上面的示例中,你會期望程式列印出 "John Doe",但它只列印出 "John"。

這就是為什麼在處理字串時,我們經常使用 getline() 函式來讀取一行文字。它以 cin 作為第一個引數,字串變數作為第二個引數:

string fullName;
cout << "Type your full name: ";
getline(cin, fullName);
cout << "Your name is: " << fullName;

// 輸入你的全名: John Doe
// 你的名字是: John Doe

C++ 字串名稱空間

你可能會看到一些 C++ 程式在沒有標準名稱空間庫的情況下執行。可以省略 using namespace std 這一行,並將其替換為 std 關鍵字,後面跟著 :: 運算子用於 string(和 cout)物件:

例子

#include <iostream>
#include <string>

int main() {
  std::string greeting = "Hello";
  std::cout << greeting;
  return 0;
}

你可以選擇是否包含標準名稱空間庫。

最後

為了方便其他裝置和平臺的小夥伴觀看往期文章:

微信公眾號搜尋:Let us Coding,關注後即可獲取最新文章推送

看完如果覺得有幫助,歡迎點贊、收藏、關注

相關文章