C和C 中字串操作

2021-07-27 12:20:10 字數 2425 閱讀 4574

string變數(物件)就是物件導向程式設計中的「物件」的乙個很好的例子。下面我們比較一下c語言與c++語言中處理字串的不同方式,對面向過程和物件導向程式設計有乙個感性認識。

c語言中有很多字串操作函式,常見的有:

以求字串長度為例,我們來看看用c語言的方式怎樣處理:

#include 

#include

int main()

c++中字串儲存在string型別的變數(物件)中,而與上述字串操作對應的操作:

與c語言的那些函式最大的不同的是,上述函式是屬於string變數自身的函式,呼叫方式是變數名.函式名(...);

以求字串長度為例,我們來看看用c++語言的方式怎樣處理:

#include 

#include

int main()

儘管上述的兩個例子很小,但是也反映了面向過程和物件導向程式設計的乙個重大區別:面向過程程式中變數由變數「外部」函式進行處理,而物件導向程式中處理某個變數的方式往往是呼叫屬於其「內部」的函式,這種變數(物件)內的函式也叫成員函式。

可能有人會問,不都是達到我們使用字串的目的嗎,這種區別有更大的意義嗎?

現實中的事物(以c語言中的結構體變數或者c++中的物件來表達的居多)很多都有自己的行為(函式)。如果將這些行為劃歸於這個事物自身,而不是事物的外部,更加有利於程式設計師在現實問題和程式之間建立對應。面向過程中的關注點更加偏重於處理變數的那些「動態」過程,而物件導向中關注點更加偏重於含有一定成員函式的「靜態」物件。這更有利於碼農們進行程式設計和程式除錯。含有函式的變數(物件)起到了某種支點的作用。

這種函式歸屬於變數的特性反映了物件導向三大特性中的封裝特性,封裝性也是另兩大特性,即繼承和多型的基礎。

下面的程式稱為姓名裝框程式,你可以輸入姓名,程式輸出問候語,並且將問候語恰好放在由』*』號組成的框中。

思考一下,利用c語言的方式處理這個程式應該如何下手?

…10分鐘過去了

可能有些同學首先想到進行各種字串輸出,直到最終輸出成中的樣子。這裡我推薦對應各行輸出內容建立乙個字元陣列,先將輸出的字串儲存到字元陣列中,最後一起輸出它們。這樣程式邏輯相對清晰,而且輸出的第5行和第1行相同,第4行和第2行相同,我們只要建立儲存前3行字串的3個字元陣列即可。各位可以思考下使用者輸入的姓名儲存到單獨的字元陣列後,先「組裝」哪行陣列呢。

下面給出部分**

#include 

using

namespace

std;

// 確保輸入姓名不超過20個位元組

#define max_name_length 20

// 確保每行最長不超過40個位元組

#define max_line_length 40

int main()

; char line2[max_line_length + 1] = ;

char line3[max_line_length + 1] = ;

char name[max_name_length + 1] = ;

int line_width;

printf("請輸入姓名:");

gets(name);

strcat(line3, name);

strcat(line3, "! *");

line_width = strlen(line3);

// 開始組裝其它行

...// 結束組裝其它行

printf("%s\n", line1);

printf("%s\n", line2);

printf("%s\n", line3);

printf("%s\n", line2);

printf("%s\n", line1);

return

0;}

注意,在組裝各行字串的時候,小心結束字元』\0』。

c語言的程式編寫完成,可以再用c++中string物件來解決這個問題。string物件可以自動管理儲存字串的大小,使用它我們就不需要考慮大小問題了。

#include 

#include

using

namespace

std;

int main()

可以猜到string line3(「」* 你好,」「); 是定義string變數,並且以括號裡的字串初始化它。

以上就是以c++方式編寫的程式。可以看到,c++中的變數「自帶」方法,這個就是封裝的體現。同時也可以看到,儘管使用了物件導向的類,但是各體來說處理流程還是過程式的。物件導向只是一種**組織方式,在實際程式設計過程中面向過程和物件導向都是需要的。

C字串和C 字串

在c中,並沒有字串這個資料型別,而是使用字元陣列來儲存字串。c字串實際上就是乙個以null 0 字元結尾的字元陣列,null字元表示字串的結束。需要注意的是 只有以null字元結尾的字元陣列才是c字串,否則只是一般的c字元陣列。c字串定義時可以利用 號進行初始化,但是以後不能利用 對c字串進行賦值。...

C字串和C 字串

from 在c中,並沒有字串這個資料型別,而是使用字元陣列來儲存字串。c字串實際上就是乙個以null 0 字元結尾的字元陣列,null字元表示字串的結束。需要注意的是 只有以null字元結尾的字元陣列才是c字串,否則只是一般的c字元陣列。c字串定義時可以利用 號進行初始化,但是以後不能利用 對c字串...

C字串和C 字串

在c中,並沒有字串這個資料型別,而是使用字元陣列來儲存字串。c字串實際上就是乙個以null 0 字元結尾的字元陣列,null字元表示字串的結束。需要注意的是 只有以null字元結尾的字元陣列才是c字串,否則只是一般的c字元陣列。c字串定義時可以利用 號進行初始化,但是以後不能利用 對c字串進行賦值。...