#include <iostream> #include <cctype> #include <algorithm> #include<stdio.h> 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<<ans<<endl; return 0; }
字符串逆序(重新申请空间和不用)
最新推荐文章于 2019-08-16 09:48:24 发布