字符串逆序(重新申请空间和不用)

#include 
#include 
#include 
#include
using namespace std;
char* Reverse(char* s)
{
    //将q指向字符串最后一个字符
    char* q = s ;
    while( *q++ ) ;
    q -= 2 ;
printf("%c %d %d",*q,q,s);
    //分配空间,存储逆序后的字符串。
    char* p = new char[sizeof(char) * (q - s + 2)] ;//加 2  是因为q s两个地址都占用了。再添加一个结束符 \0
    char* r = p ;

    // 逆序存储
    while(q >= s)
        *p++ = *q-- ;
    *p = '\0' ;

    return r ;
}
//不占用多余空间
char* Reverse2(char* s)
{
    // p指向字符串头部
    char* p = s ;

    // q指向字符串尾部
    char* q = s ;
    while( *q )
        ++q ;
    q -- ;

    // 交换并移动指针,直到p和q交叉
    while(q > p)
    {
        char t = *p ;
        *p++ = *q ;
        *q-- = t ;
    }

    return s ;
}
int main()
{
    char name[100] ;
   gets(name);
    char * ans=Reverse2(name);
    cout<


 
 

你可能感兴趣的:(华为OJ,算法)