1.普通逆序
#define _crt_secure_no_warnings#include2.字串原地逆序#include
using
namespace
std;
void reverse(string &str)
}int main(void
)
即不能開闢額外的記憶體空間,思想是將字串兩邊的字元逐個交換位置。定義兩個指標分別指向字串頭部和尾部。
#define _crt_secure_no_warnings#include3.字串原地逆序-異或版using
namespace
std;
char* reverse(char *str)
return
str;
}int
main()
在要求不使用臨時變數情況下可以使用異或交換兩個變數的值。 先嘮嘮異或操作:
參與異或運算的兩個變數,如果兩個相應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#include4.對乙個句子按單詞逆序using
namespace
std;
char* reverse(char*str)
return
str;
}int
main()
比如,輸入」i am a student」,要求輸出」student a am i」
參考字串原地逆序,不妨先將句子的輸出結果逆序,即為」i ma a tneduts」,可以看出正好是輸入句子中的每個單詞的逆序。 則解題思路可以先將輸入的句子按單詞逆序,最後將結果再次逆序即可。
#define _crt_secure_no_warnings#include5.字串逆序列印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()
此類問題因為不需要儲存,比較簡單,這裡只介紹乙個利用遞迴的呼叫和回溯正好相反的小技巧。
比如:
#define _crt_secure_no_warnings#includeusing
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...