C 過載 C 中的字串類

2021-08-20 09:26:57 字數 1944 閱讀 3068

本文參照於狄泰軟體學院,唐佐林老師的——《c++深度剖析教程》

c語言不支援真正意義上的字串

c語言用字元陣列和一組函式實現字串操作

c語言不支援自定義型別,因此無法獲得字串型別。

但是實際工程開發中,大多數情況都需要進行字串處理,所以這個問題需要解決。而在c++中是這樣解決這個問題的:

問題:c++中的原生型別系統是否直接包含字串型別?

因為c++語言直接c語言的所有概念,所以c++語言中沒有原生的字串型別。c++中的字串型別是通過標準庫提供的string類來實現的。

1. string類直接支援字串連線

2. string類直接支援字串的大小比較

3. string類直接支援子串查詢和提取

4. string類直接支援字串的插入和替換

這些實現,依賴了c++的操作符過載的機制。所以在c語言無法用結構體來實現string類。只能依賴於函式來進行字串操作的功能。

示例**:c++中的字串類的使用

#include 

#include

using

namespace

std;

void string_sort(string a, int len)}}

}string string_add(string a, int len)

return ret;

}int main()

; string_sort(sa, 7);

for(int i=0; i<7; i++)

cout

<< endl;

cout

<< string_add(sa, 7) << endl;

return

0;}

問題:那麼在c語言中應該如何實現呢?

#include 

#include

void string_sort(char a[7][16], int len)}}

}int main()

; string_sort(sa, 7);

for(i=0; i<7; i++)

return

0;}

分析:

(1) 從**我們可以看出:c++**比c語言簡潔。沒有出現任何指標運算,並且不需要中間字串變數。

(2) c語言中只能有字串陣列來實現,不能用char*實現,因為指標字串是不能被修改的。(因為指標字串存放在**段)

(3) c語言的可移植性比c++的差,陣列需要固定大小。

這樣看來,string類的應用使得問題的求解變得簡單。

標準庫中提供了相關的類對字串和數字進行轉換

字串類sstream用於string的轉換

相關標頭檔案

istringstream 字串輸入流

ostringstream 字串輸出流

示例**:

#include 

#include

#include

using

namespace

std;

#define to_number(s, n) (istringstream(s) >> n)

#define to_string(n) (((ostringstream&)(ostringstream() << n)).str())

int main()

string s = to_string(12345);

cout

<< s << endl;

return

0;}

C 過載 字串類的實現

本文參照於狄泰軟體學院,唐佐林老師的 c 深度剖析教程 我們知道c語言的字串是用字元陣列來實現的。這就意味著我們可以用下標操作符來訪問字串中的單個字元。那麼,string類可以直接訪問單個字元嗎?示例 用c方式使用string類 include include include using names...

C 中的字串類

1 c語言不支援真正意義上的字串 2 c語言用字元陣列和一組實現字串操作 3 c語言不支援自定義型別,因此無法獲得字元型別 1 從c到c 的進化過程引入了自定義型別 2 從c 中可以通過類完成字串型別的定義 問題 c 中的原生型別系統是否包含字串型別?1 c 語言直接支援c語言的所有概念 2 c 語...

C 中的字串類

歷史遺留問題 c語言不支援真正意義上的字串 c語言用字元陣列和一組函式實現字串操作 c語言不支援自定義型別,因此無法獲得字串型別 解決方案 從c到c 的進化過程引入了自定義型別 在c 中可以通過類完成字串型別的定義 include include using namespace std void s...