反转字符串
不开辟新的空间, 例如: 将"it’s an apple"转换成"apple an it’s"
// 空间翻转
void* memreverse(void* _Src, size_t _Size) {
if (NULL == _Src || _Size <= 1) {
return NULL;
}
unsigned char* srcStart = (unsigned char*)_Src;
unsigned char* srcEnd = srcStart + _Size - 1;
while (srcStart< srcEnd)
{
if (*srcStart != *srcEnd) {
*srcStart ^= *srcEnd;
*srcEnd ^= *srcStart;
*srcStart ^= *srcEnd;
}
srcStart++;
srcEnd--;
}
return _Src;
}
// 字符串有序翻转
int reverseString(char* src) {
int ret = -1;
do
{
if (NULL == src) {
break;
}
int strSiz = 0;
char* pStart = src;
char* pWord = src;
while (*pStart !='\0')
{
strSiz++;
pStart++;
}
pStart = src;
// 翻转整串
if (memreverse(src, strSiz) == NULL) {
break;
}
// 子串翻转
while (strSiz -- ) {
if (*pStart != ' ' && strSiz != 0) {
pStart++;
continue;
}
if (strSiz == 0) {
pStart += 1;
}
if (memreverse(pWord, pStart - pWord) != NULL) {
pWord = pStart + 1;
}
pStart++;
}
ret = 0;
} while (0);
return ret;
}
void test_reverse(){
char src[] = "it's an apple";
cout << src << endl;
reverseString(src);
cout << src << endl;
}