您的位置:首页 > 其它

字符串两次翻转

2013-10-22 22:42 169 查看
// test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "iostream"

using namespace std;
void reverse(char * ps, char * pn);
char * strprocess(char * str);
char * strCopy(char * dst, const char * src);

int main(int argc, char * argv[])
{
char str[] = "could you tell me how to complete this problem";
char * p = strprocess(str);
cout<<p<<endl;

char * p2 = (char *)malloc(strlen(str));
p2 = strCopy(p2, str);
cout<<p2<<endl;

system("pause");
return 0;
}

char * strprocess(char * str)
{
if(str == NULL || *str == '\0')
return NULL;

char * ps = str;
char * pn = str;
while(*pn != '\0') pn++;
pn--;

reverse(ps, pn);
ps = str;

while(*ps != '\0')
{
pn = ps;
while(*pn != '\0' && *pn != ' ' ) pn++;
reverse(ps, pn - 1);
if(*pn == '\0') break;
ps = pn + 1;
}

return str;
}

void reverse(char * ps, char * pn)
{
while(ps <= pn)
{
char temp = *ps;
*ps = *pn;
*pn = temp;
ps++;
pn--;
}
}

// copy str
char * strCopy(char * dst, const char * src)
{
if(dst == NULL || src == NULL) return NULL;
char * strDest = dst;
while((*dst++ = *src++)!='\0');
return strDest;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: