reverse()的实现字符串反转和模板reverse的实现


//reverse()的实现

#include <stdio.h>
#include <string.h>

char* reverse(char* s)
{
    int i,j;
    for (i=0,j=strlen(s)-1;
        i<j; ++i,--j)
    {
        s[i] = s[i]^s[j];
        s[j] = s[i]^s[j];
        s[i] = s[i]^s[j];
    }
    return s;
}

char* reverse2(char* s)
{
    char* start = s;
    char* end = s+strlen(s)-1;
    while (start<end)
    {
        *start = *start^*end;
        *end = *start^*end;
        *start = *start^*end;
        start++;
        end--;
    }
    return s;
}

int main()
{
    char str[]="abcdefghijklmnopqrstuvwxyz";
    printf("%s\n", str);
    printf("%s\n", reverse(str));
    printf("%s\n", reverse2(str));
    return 0;
}
//reverse()函数模板的实现

#include <iostream>
#include <cstring>
using namespace std;

template <class BidirectionalIterator>
void reverse ( BidirectionalIterator first, BidirectionalIterator last)
{
    while ((first!=last)&&(first!=--last))
    {
        *first = *first^*last;
        *last = *first^*last;
        *first = *first^*last;
        ++first;
    }
}

template <class BidirectionalIterator>
BidirectionalIterator reverse2(BidirectionalIterator first, BidirectionalIterator last)
{
    BidirectionalIterator begin = first;
    while ((first!=last)&&(first!=--last))
    {
        *first = *first^*last;
        *last = *first^*last;
        *first = *first^*last;
        ++first;
    }
    return begin;
}

int main()
{
    char str[]="abcdefghijklmnopqrstuvwxyz";
    cout << str << endl;
    reverse(str,str+strlen(str));
    cout << str << endl;
    cout << reverse2(str,str+strlen(str)) << endl;
    return 0;
}

image


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM