C語言通過指標和陣列實現字串倒序

2021-07-26 11:26:56 字數 1426 閱讀 6766

1.陣列方式實現  (不用字串函式)程式如下

1

void reversebyarray(char *s)

213 }

與陣列有關的操作,必須要用到字串長度len (因為取長度比較簡單,就不用字串函式了)

在3-5行 首先用檢測 '\0' 字元判斷取字串長度 用len變數記錄

我嘗試過下面這一種** 測到的字串長度比原來大1

int len = 0

;while (s[len++] != '

\0')

; //空語句

就不使用上面這種方法

然後是倒序的具體實現,

常見的好幾種方法,網上好多是malloc出來len+1大小的空間 然後逆序放進去

但是我覺得,既然是陣列實現,就用乙個臨時變數t

用前後交換的方法 直接完成交換(迴圈只是迴圈len/2)

另外乙個容易出現問題的是 交換的時候s[len - i - 1] ,為什麼要多減1呢?

2.用指標的方法 字串倒序

1

void reversebypointer(char *s)

2

用指標 就要突出指標的特點 就不像陣列

第一眼看上去,程式似乎特別簡單.

但是 這個程式用到了緩衝區,

如果這個緩衝區大小不夠  ↓如下

在緩衝區足夠的情況下 ,程式就會正常執行辣

這裡新建的兩個指標變數b和p都不是多餘 起個別名用 都有實在的作用

buf是陣列名 值雖然是陣列的首位址,但是這個首位址不能進行加減操作,所以新建了個b指標 指向buf

s 是 char * 型別的 可以加減 但是 加到最後(找到\0後) 怎麼倒回來呢? 

那麼  我就選擇 定義乙個p指標變數 並賦值為 指標s  就是 s和p是一樣的

而且 p向後移動 找到'\0'後 它的任務就完成了  並不需要回到開始的位置

最後 把buf的內容 -- (倒著)填回 s 指向的字串就行了

最後就是\0的問題  因為字串只是倒序 長度沒有變化,所以\0用的還是s原來的\0 不用在末尾新增\0

3.完整的程式和執行結果

1 #include 2

3void reversebyarray(char *s)415

}1617void reversebypointer(char *s)

1827

28int

main()

2939

40/*

在vc編譯器的執行結果

41源字串:i love you 233

42陣列方式倒序:332 uoy evol i

43指標方式倒序:i love you 233

44請按任意鍵繼續. . .

45*/

本人原創()

C語言通過指標和陣列實現字串倒序

1.陣列方式實現 不用字串函式 程式如下 1 void reversebyarray char s 213 與陣列有關的操作,必須要用到字串長度len 因為取長度比較簡單,就不用字串函式了 在3 5行 首先用檢測 0 字元判斷取字串長度 用len變數記錄 我嘗試過下面這一種 測到的字串長度比原來大1...

指標字串和陣列指標

指標是c語言的精髓,只有掌握好指標才算是真正學會了c語言,以下就是學習指標的例子 include main int n 5 sort name,n print name,n if strcmp1 name 0 name 1 0 printf s,s n name 0 name 1 if strcmp...

C 指標和陣列 字元和字串 字元陣列

char ch 24 字元陣列初始化時,如果使用者未顯示新增 0 編譯器會自動加上,以表示字串結束。所以上面的初始化就相當於 char ch 24 除了用上述的方式來初始化乙個字元陣列,還可以用下面的方式 char ch today is a beautiful day char ch char p...