從小見大之 字串反轉

2021-06-22 14:54:24 字數 1531 閱讀 4918

翻轉字串:

如:「i am a student.

」 翻轉其中所有字元得到「

.tneduts a ma i」

以下是測試後的**:

#include#include#includevoid swapsentence(char* sen)

}int main()

在除錯過程中,發現以下幾點需要注意:

1.字串初始化

剛開始寫成char s=""; 隨後程式在執行過程中異常終止,顯示暴力訪問的異常。原因是初始化時僅為s分配了1個位元組的空間,之後卻讀取了大於1個位元組的內容,內容訪問越界。需要在初始化時就申請足夠的空間。以下兩種均可:

char *s=(char *)malloc(sizeof(char)*10);

char s[20]="";

2.讀入一行字元

在c中有gets函式,在c++有getline函式。

-----

原型:char*gets(char*

buffer);

從stdin流中讀取

字串,直至接受到換行符或eof時停止,並將讀取的結果存放在buffer

指標所指向的字元

陣列中。換行符不作為讀取串的內容,讀取的換行符被轉換為

null

值,並由此來結束字串。

gets(s)函式與

scanf("%s",s)

相似,但不完全相同,使用scanf("%s",s) 函式輸入

字串時存在乙個問題,就是如果輸入了空格會認為字串結束,空格後的字元將作為下乙個輸入項處理,但gets()函式將接收輸入的整個字串直到遇到換行為止。

------

cin.getline()   // 接受乙個字串,可以接收空格並輸出,需包含

#include

using namespace std; 

main () 

輸入:jkljkljkl 

輸出:jklj

接受5個字元到m中,其中最後乙個為'\0',所以只看到4個字元輸出;

cin.getline()實際上有三個引數,cin.getline(字元指標(char*),字元個數n(int),結束符(char)); 

當第三個引數省略時,系統預設為'\0' 

--------

getline()     // 接受乙個字串,可以接收空格並輸出,需包含「#include」

#include

#include

using namespace std; 

main () 

輸入:jkljkljkl 

輸出:jkljkljkl

3.strlen

4.字串反轉臨界條件

i初始化為0,j初始化為len-1(即'\0'的前乙個字元元素),臨界值為(len-1)/2。然後從兩邊開始交換對應位置上的字元。

for(int i=0; i<=(len-1)/2; i++)

字串反轉

據說一道微軟的面試題,要求考慮時間和空間的優化,下面給出幾種通常字串反轉的方法 1 直接陣列操作 char strreverse char str return str 這種做法原來的str沒有儲存,原來的str也改變了 2 指標操作 char strreverse char str return ...

字串反轉

include include include 方法一 將第乙個字元和最後乙個互換,第二個和倒數第二個互換,如此依次迴圈下去 char strrev1 const char str return tmp free tmp 方法二 不額外申請一片儲存字串的記憶體空間,通過中間變數來改變傳遞進來的字串裡...

字串反轉

解法一 第一次看到這題目,想到最簡單 最直覺的解法就是 遍歷字串,將第乙個字元和最後乙個交換,第二個和倒數第二個交換,依次迴圈,即可,於是有了第乙個解法 const char str return tmp 這裡是通過陣列的下標方式訪問字串的字元,實際上用指標直接操作即可。解法二正是基於此,實現 為 ...