字符串反转1.1,首尾交换,逐个处理。
#include "stdafx.h"
void fanzhuanZFC(char* pStr)
{
if(!pStr)
return;
char * pSave = pStr;
int len = 0;
while(*pStr++)
{
len++;
}
for(int i = 0; i < len/2; i++)
{
char tmp = pSave[i];
pSave[i] = pSave[len-1-i];
pSave[len-1-i] = tmp;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char tst[] = "ajfka;lfkl";
printf("%s\n",tst);
fanzhuanZFC(tst);
printf("%s\n",tst);
getchar();
return 0;
}
1.2 有人喜欢全使用指针,而不是数组
void fanzhuanZFC(char* pStr)
{
if(!pStr)
return;
char * pBegin = pStr;
char * pEnd = pStr;
while(*pEnd++)
{
//do nothing
}
pEnd -= 2;
while(pBegin < pEnd)
{
char tmp = *pBegin;
*pBegin++ = *pEnd;
*pEnd-- = tmp;
}
}
1.3 如果可以使用库函数,代码就更简单了,包含string.h,
#include <string.h>
void fanzhuanZFC(char* pStr)
{
if(!pStr)
return;
_strrev(pStr);//记得前面的下划线,strrev已淘汰了
}
1.4 若使用stl库,也可以实现
#include <string>
#include <algorithm>
void fanzhuanZFC(char* pStr)
{
if(!pStr)
return;
std::string str = pStr;
reverse(str.begin(), str.end());
strcpy(pStr,str.c_str());
}