1.4 c/c++反转字符串

反转字符串

不开辟新的空间, 例如: 将"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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值