字串逆序小結

2022-07-31 18:09:10 字數 2086 閱讀 2826

1.普通逆序

#define _crt_secure_no_warnings#include 

#include

using

namespace

std;

void reverse(string &str)

}int main(void

)

2.字串原地逆序

即不能開闢額外的記憶體空間,思想是將字串兩邊的字元逐個交換位置。定義兩個指標分別指向字串頭部和尾部。

#define _crt_secure_no_warnings#include 

using

namespace

std;

char* reverse(char *str)

return

str;

}int

main()

3.字串原地逆序-異或版

在要求不使用臨時變數情況下可以使用異或交換兩個變數的值。   先嘮嘮異或操作:

參與異或運算的兩個變數,如果兩個相應bit位相同,則結果為0,否則為1。

即:

0^0 = 0,      1^0 = 1,      0^1 = 1,      1^1 = 0

不難得出按位異或的幾個特點:

(1) 任何數與全0異或,不變

(2) 任何數與全1異或, 取反

(3) 任何數與自己異或,則把自己置0

類似於不用中間變數交換兩個變數的值:a = a + b;  b = a – b;  a = a – b;

不用中間變數交換兩個變數的值還可以使用異或操作:

例如交換兩個整數a=10100001,b=00000110的值,可通過下列語句實現:

a = a^b; //a=10100111

b = b^a; //b=10100001

a = a^b; //a=00000110

#define _crt_secure_no_warnings#include 

using

namespace

std;

char* reverse(char*str)

return

str;

}int

main()

4.對乙個句子按單詞逆序

比如,輸入」i am a student」,要求輸出」student a am i」

參考字串原地逆序,不妨先將句子的輸出結果逆序,即為」i ma a tneduts」,可以看出正好是輸入句子中的每個單詞的逆序。   則解題思路可以先將輸入的句子按單詞逆序,最後將結果再次逆序即可。

#define _crt_secure_no_warnings#include 

using

namespace

std;

void reverseword(char* p, char*q)

}char* reversesentence(char*str)

else

}/** 對最後乙個單詞逆序 *

*/reverseword(p, q-1

);

/** 最後將整個句子逆序 *

*/reverseword(str, q-1

);

return

str;

}int

main()

5.字串逆序列印

此類問題因為不需要儲存,比較簡單,這裡只介紹乙個利用遞迴的呼叫和回溯正好相反的小技巧。

比如:

#define _crt_secure_no_warnings#include 

using

namespace

std;

//利用遞迴呼叫順序和回溯順序相反

void

printstring()

if(char1 != '#'

)

}int

main()

字串 字串逆序

題目一 如果乙個字串 str 把字串 str 前面的任意部分挪到後面去形成的字串叫做 str 的旋轉詞。比如 str 1234 那麼 str 的旋轉詞有 1234 2341 3412 4123 給定兩個字串 a 和 b 請判斷 a 和 b 是否互為旋轉詞?舉例 a cdab b abcd 返回 tr...

字串逆序

1 方法1 protected void page load object sender,eventargs e 1.逆序乙個字串 public string reversestr return s1 2 方法2 public void reversestr 方法3 protected void p...

字串逆序

reverse int arr,int b,int e rightshift int arr,int n,int k abc defg defg abc 方法一 翻轉 abc defg cba gfed cba gfed defg abc經過三次翻轉 如上。方法二 交換加翻轉 abc defgh d...