首页 > 代码库 > (转)c++字符串反转

(转)c++字符串反转

//通过不同的方法,实现对所输入字符串的反转,可以很好地复习巩固 C++ 基础知识

/*分析过程:

  假设要使传递的字符串为常量const字符串,这样操作更加灵活,可直接传递字符串字面值进行反转,常见的解决方法就是,定义一个新的与传递过来字符串长度

  相等的字符数组,然后进行字符串拷贝,把str字符按从左到右放置到字符数组中,然后采用循环来对字符数组中字符反转

*/

#include <iostream>
#include <string>

/*第一种,采用以上思路解法,传递为const类型C风格字符指针,返回为char*类型*/

//直接使用字符数组赋值

char* strrev(const char* pChar)
{
    size_t len=strlen(pChar);
    char* pTemp=new char[len+1];
    memset(pTemp,0,len+1);
    memcpy(pTemp,pChar,len);
    char ch;
    for(size_t i=0;i<len/2;i++)
    {
        ch=pTemp[i];
        pTemp[i]=pTemp[len-1-i];
        pTemp[len-1-i]=ch;
    }
    return pTemp;
}

//采用指针操作方式
char* strrevp(const char* pChar) { char* pTemp=new char[strlen(pChar)+1]; memset(pTemp,0,strlen(pChar)+1); strcpy(pTemp,pChar); char* pRelt=pTemp; //这个要注意(因为pTemp在交换过程中改变了) char* p=pTemp+strlen(pChar)-1; char ch; while(p>pTemp) { ch=*p; *p--=*pTemp; *pTemp++=ch; } return pRelt; } int main() { std::string str("Hello"); int len=std::strlen(str.c_str()); std::cout<<"Length = "<<len<<std::endl; char* pRev=strrev(str.c_str()); std::cout<<"Result : "<<pRev<<",Length : "<<strlen(pRev)<<std::endl; //if(NULL!=pRev) delete [] pRev; std::string str2("World"); char* pNext=strrevp(str2.c_str()); std::cout<<"Result : "<<pNext<<",Length : "<<strlen(pNext)<<std::endl; delete [] pNext; std::cout<<"Over"<<std::endl; getchar(); return 0; }