字符串反转的完整程序(C语言)

3 views
Skip to first unread message

Bob

unread,
Oct 21, 2006, 11:09:34 PM10/21/06
to 程序员乐园

#include "stdafx.h"

// 对字符串进行反转
void Reverse1(char *str)
{
int len = 0;
while ('\0' != str[len])
len++;

char temp;
for (int j = 0; j < len/2; j++)
{
temp = str[j];
str[j] = str[len-j-1];
str[len-j-1] = temp;
}
}

void Reverse2(char *str)
{
int len = 0;
while ('\0' != str[len])
len++;
for (int j = 0; j < len/2; j++)
{
str[j] ^= str[len-j-1];
str[len-j-1] ^= str[j];
str[j] ^= str[len-j-1];
}
}

void Reverse3(char *str)
{
char *s = str;
char *e = str;

while (*e++)
;
e -= 2;
while (s<e)
{
*s ^= *e;
*e ^= *s;
*s++ ^= *e--;
}
}

void Reverse(char* pStart, char* pEnd)
{
while (pStart < pEnd)
{
*pStart ^= *pEnd;
*pEnd ^= *pStart;
*pStart++ ^= *pEnd--;
}
}

// 以单词为单位反转
void ReverseString(char* str)
{
int length = 0;
while (str[length])
length++;
Reverse(str, str + length - 1);

char *p = str;
for (int i = 0; '\0' != *p; p++)
{
if ( ' ' != *p ) // 仅判别空格作为单词分隔符的情况
i++;
else if (i > 0)
{
Reverse(p - i, p - 1);
i = 0;
}
}
}

int _tmain(int argc, _TCHAR* argv[])
{
char a[] = " I love you baby ";

printf("%s\n", a);
Reverse1(a);
printf("%s\n", a);
Reverse2(a);
printf("%s\n", a);
//Reverse3(a);
//printf("%s\n", a);
ReverseString(a);
printf("%s\n", a);

return 0;
}

//-------------------------------------------------
// 更多注释见softeden.blogspot.com
//--------------------------------------------------

Reply all
Reply to author
Forward
0 new messages