首先用陣列下標的形式實現:
提供三種方法:
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...