C++獲取字串長度詳解

2020-07-16 10:04:37
String 型別物件包括三種求解字串長度的函數:size()length()maxsize() capacity()
  • size() 和 length():這兩個函數會返回 string 型別物件中的字元個數,且它們的執行效果相同。
  • max_size():max_size() 函數返回 string 型別物件最多包含的字元數。一旦程式使用長度超過 max_size() 的 string 操作,編譯器會拋出 length_error 異常。
  • capacity():該函數返回在重新分配記憶體之前,string 型別物件所能包含的最大字元數。

string 型別物件還包括一個 reserve() 函數。呼叫該函數可以為 string 型別物件重新分配記憶體。重新分配的大小由其引數決定。reserve() 的預設引數為 0。

上述幾個函數的使用方法如下程式所示:
#include <iostream>
#include <string>
using namespace std;
int main ()
{
    int size = 0;
    int length = 0;
    unsigned long maxsize = 0;
    int capacity=0;
    string str ("12345678");
    string str_custom;
    str_custom = str;
    str_custom.resize (5);
    size = str_custom.size();
    length = str_custom.length();
    maxsize = str_custom.max_size();
    capacity = str_custom.capacity();
    cout << "size = " << size << endl;
    cout << "length = " << length << endl;
    cout << "maxsize = " << maxsize << endl;
    cout << "capacity = " << capacity << endl;
    return 0;
}
程式執行結果為:

size = 8
length = 8
maxsize = 2147483647
capacity = 15

由此程式可知,string 型別物件 str_custom 呼叫 reserve() 函數時,似乎並沒有起到重新分配記憶體的目的(筆者所用編譯器為 Visual C++6.0)。

修改上述程式碼,刪除語句 str_custom.reserve (5),在程式碼 str_custom = str 之後如下新增程式碼:

str_custom.resize (5);

修改後程式的執行結構如下:

size = 5
length = 5
maxsize = 2147483647
capacity = 15

重新設定 string 型別物件 str_custom 的大小之後,重新求解 str_custom 的大小,其執行效果與設定的數值一致(均為 5)。