2021 03 09 程式語言2 字串

2021-10-21 14:06:33 字數 3086 閱讀 4132

**塊:

#include

#include

class

cmystring

;cmystring::

cmystring

(char

*pdata)

else

}cmystring::

cmystring

(const cmystring &str)

cmystring::

~cmystring()

cmystring& cmystring::

operator=(

const cmystring& str)

void cmystring::

print()

void

test1()

void

test2()

void

test3()

intmain

(int argc,

char

* ar**)

輸出口結果:

./a.out

test1 begins:

the expected result is: hello world.

the actual result is: hello world.

test2 begins:

the expected result is: hello world.

the actual result is: hello world.

test3 begins:

the expected result is: hello world.

the actual result is: hello world.

the expected result is: hello world.

the actual result is: hello world.

改進: 為什麼建構函式的pdata為null 要申請乙個char字元的空間?

**塊:

#include

#include

class

cmystring

;cmystring::

cmystring

(char

*pdata)

else

}cmystring::

cmystring

(const cmystring &str)

cmystring::

~cmystring()

cmystring& cmystring::

operator=(

const cmystring& str)

void cmystring::

print()

void

test1()

void

test2()

void

test3()

intmain

(int argc,

char

* ar**)

輸出結果:

./a.out

test1 begins:

free(): invalid pointer

aborted (core dumped)

分析: 因為初始化的時候沒有對,成員指標 (m_pdata)賦值為null.

改進: 在建構函式 m_pdata = null;

**塊;

#include

#include

class

cmystring

;cmystring::

cmystring

(char

*pdata)

else

}cmystring::

cmystring

(const cmystring &str)

cmystring::

~cmystring()

cmystring& cmystring::

operator=(

const cmystring& str)

void cmystring::

print()

void

test1()

void

test2()

void

test3()

intmain

(int argc,

char

* ar**)

輸出結果:

./a.out

test1 begins:

the expected result is: hello world.

the actual result is: hello world.

test2 begins:

the expected result is: hello world.

the actual result is: hello world.

test3 begins:

the expected result is: hello world.

the actual result is: hello world.

the expected result is: hello world.

the actual result is: hello world.

分配記憶體失敗 ,資料安全性解法 :

方法1 :

乙個簡單的辦法是我們先用new分配新內容再用delete釋放已有的內容。這樣只在分配內容成功之後再釋放原來的內容,也就是當分配記憶體失敗時我們能確保cmystring的例項不會被修改。

方法2:

我們還有乙個更好的辦法是先建立乙個臨時例項,再交換臨時例項和原來的例項。

分析 : 申請個臨時物件,利用退棧,自動呼叫析構進行處理。 如果由於記憶體不足丟擲諸如bad_alloc等異常,我們還沒有修改原來例項的狀態,因此例項的狀態還是有效的,這也就保證了異常安全性。

C語言程式設計 9 4 字元統計

輸入乙個字串 其長度不超過81 分別統計其中26個英文本母出現的次數 不區分大 小寫字母 並按字母出現次數從高到低排序,若次數相同,按字母順序排列。字母輸出格式舉例,例如 a 3,表示字母a出現3次,c 0表示字母c沒有出現。輸入 第一行為輸入,佔一行,輸入的字串可能含有空格 輸出 第二行為輸出,佔...

程式語言系列 1 字串 (C C )

c 語言中,字串實際上是使用 0 字元終止的一維字元陣列 include 1.建立 char greeting 6 char greeting hello 2.獲取字串長度 len strlen str1 3.複製 strcpy str1,str2 把str2複製到str1 4.連線 strcat ...

IO流 2 字元流

構造方法 filewriter file file filewriter string filename filereader file file filereader string filename 寫資料方法 一次寫乙個字元 write int c 一次寫乙個字元陣列write char cbu...