编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
1. 借助char类型的temp交换
void reverseString(vector<char>& s) {
for(int i=0;i<s.size()/2;i++)
{
temp save;
temp = s[i];
s[i]=s[s.size()-1-i];
s[s.size()-1-i] = temp;
}
}
2. 使用迭代器
void reverseString(vector<char>& s) {
if (s.size()>0)
{
vector<char>::iterator p,q;
p = s.begin();
q = s.end()-1;//end返回一个指向尾后元素的指针,一般是'\0'空字符常量
while (p < q)
{
char tmp = *p;
*p = *q;
*q = tmp;
p++;
q--;
}
}
3. 利用swap函数
void reverseString(vector<char>& s) {
int i = 0;
int j = s.size() - 1;
while(i<j)
{
swap(s[i],s[j]);
++ i;
-- j;
}
}
4. 使用STL自带的reverse
void reverseString(vector<char>& s) {
reverse(s.begin(),s.end());
}
5. 通过异或操作交换字符
void reverseString(vector<char>& s) {
int front = 0, tail = s.size()-1;
while(front < tail)
{
s[front] ^= s[tail];
s[tail] ^= s[front];
s[front++] ^= s[tail--];
}
}
//while循环中的三行语句意义如下
//s[front] = s[front] ^ s[tail];
//s[tail] = s[tail] ^ s[front] ^ s[tail] = s[front];
//s[front++] = s[front] ^ s[tail] ^ s[front] = s[tail];