編寫字串反轉函式

2021-05-23 12:42:21 字數 1619 閱讀 3568

首先用陣列下標的形式實現:

提供三種方法:

1、有中間變數

2、無中間變數

3、堆疊實現

#include

#include

void reverse_str(char * ch);

void reverse_str2(char *ch);

int main(void)

void reverse_str(char *ch)  /*使用中間變數*/

ch[len+1] = 0;

void reverse_str2(char *ch)   /*不用中間變數*/

ch[len+1] = 0;

}//堆疊實現

我沒有記錯的話是一道msn的筆試題,網上無意中看到的,拿來做了一下。題目是這樣的,給定乙個字串,乙個這個字串的子串,將第乙個字串反轉,但保留子串的順序不變。例如:

輸入: 第乙個字串: "this is zhuxinquan's chinese site: http://www.zhuxinquan.com/cn"

子串: "zhuxinquan"

輸出: "nc/moc.zhuxinquan.www//:ptth :etis esenihc s'zhuxinquan si siht"

一般的方法是先掃瞄一邊第乙個字串,然後用stack把它反轉,同時記錄下子串出現的位置。然後再掃瞄一遍把記錄下來的子串再用stack反轉。我用的方法是用一遍掃瞄陣列的方法。掃瞄中如果發現子串,就將子串倒過來壓入堆疊。

最後再將堆疊裡的字元彈出,這樣子串又恢復了原來的順序。源**如下:

#include 

#include

#include

using namespace std;

//reverse the string 's1' except the substring 'token'.

const char* reverse(const char* s1, const char* token)

if(*ptoken == '/0')//contain the token

else

}char * return_v = new char[strlen(s1)+1];

int i=0;

while(!stack1.empty())

return_v[i]='/0';

return return_v;

}int main(int argc, char* argv)

i /=2

;str--;

while

(i--

>0)

說明:演算法中運用了:a ^ a = 0  和 a ^ 0 = a 的特性。以此來進行變數值的交換,可以避免使用額外的臨時變數

另外c標準字串反轉函式strrev

原型:extern char *strrev(char *s);   用法:#include 功能:把字串s的所有字元的順序顛倒過來(不包括空字元null)。   說明:返回指向顛倒順序後的字串指標。   舉例:   // strrev.c   #include #include main()    

編寫字串複製函式strcpy及memcpy函式

strcpy與memcpy兩函式的經典實現,哈哈,不過,不是偶寫的!char strcpy char des,const char src void memcpy void pvto,const void pvfrom,size t size 經典試題 已知strcpy函式的原型是 char str...

字串反轉函式

header content type text html charset utf 8 此函式的作用是反轉中文字串 mb strlen 獲取字元的長度 mb substr 獲取字元的單個元素 krsort 按照鍵值逆序排序陣列 implode 將陣列拼接為字串 explode 使用字串分隔字串 fu...

15 自己寫字串庫函式

1 求字串長度。2 實現strcmp函式。3 在乙個字串中找到可能的最長的子字串,該子字串是由同一字元組成的。1 自己寫的 include include include const int maxn 100 using namespace std 1 求字串長度。int mylength char...