void ReverseCString(char* ch)
{
int size = strlen(ch);
int head = 0;
int tail = size-1;
while(head < tail)
{
char tmp = ch[head];
ch[head++] = ch[tail];
ch[tail--] = tmp;
}
}
void ReverseCString2(char* str)
{
char * end = str;
char tmp;
if (str)
{
while (*end)
{
++end;
}
--end;
while (str < end)
{
tmp = *str;
*str++ = *end;
*end-- = tmp;
}
}
}
如果用while(*end++);
则要用两次--end; 因为即使最后一次没有进入循环,end也被加了一次,即跳出循环后end指向\0的下一个元素。
如果用while(*++end);
则只用一次--end; 但是end的初始状态没有被检测。所以最好用while(*end) end++;
void ReverseString(char * ch,int len)//recursion
{
if(len<=1)
{
return;
}
char temp;
temp=ch[0];
ch[0]=ch[len-1];
ch[len-1]=temp;
ReverseString(++ch,len-2);
}
void ReverseStringUsingStack(char* ch)
{
stack<char> s;
for(int i = 0; i < strlen(ch); i++)
s.push(ch[i]);
for(int i = 0; i < strlen(ch); i++)
{
ch[i] = s.top(); //reverse the string
s.pop();
}
}