字符串翻转

如何在不使用任何PHP内置函数的情况下,实现字符串翻转?

我的代码

function strReverse($str){

    //将参数强制转为字符串格式
	$str = is_string($str) ? $str : $str.'';

	//结果初始化
	$newStr = '';

	//求出字符串的长度
	$i = 0;
	while($str[$i]){
		$i++;
	}

	//将原字符串倒序赋值给
	while($str[$i-1]){
		$newStr .= $str[$i-1];
		$i--;
	}

	var_dump($str);
	var_dump($newStr);
}

strReverse('abcdefghi');

结果

/opt/wwwroot/test/test7.php:164:string 'abcdefghi' (length=9)
/opt/wwwroot/test/test7.php:165:string 'ihgfedcba' (length=9)

其他方法

尽管用了内置函数,仍有参考价值

1, 内置的strrev()函数;

2, 循环法

/**  
 * 循环实现对字符串的逆序排列(效率比二分法低)  
 * @param string $str 源字符串  
 * @return string 返回逆序后的字符串  
 */  
function reverse($str='') {
	
	//将参数强制转为字符串格式
	$str = is_string($str) ? $str : $str.'';
	$len = strlen($str);
	//结果字符串初始化
	$result = '';  
	for ($i=$len-1; $i>=0; $i--) {
		$result .= $str[$i];  
	}  
	return $result;  
}

var_dump(reverse(123));

3, 二分法

/**  
 * 二分法实现字符串倒序排列(效率比循环法高)
 * @param string $str 源字符串  
 * @return string 返回倒序后的字符串  
 */  
function reverse($str='') {
	//将参数强制转为字符串格式
	$str = is_string($str) ? $str : $str.''; 
	$len = strlen($str);
	$mid = floor($len/2);
	//利用第i位字符和其对称的位字符的位置相加和等于长度-1的特性进行遍历 i+x=$len-1 => x=$len-1-i
	for ($i=0; $i<$mid; $i++) {
		//将i位字符暂存在中间量中
		$temp = $str[$i];
		//将倒数i位字符赋值给i位字符 
		$str[$i] = $str[$len-$i-1];
		//将存在中间量中的i位字符赋值给倒数i位字符
		$str[$len-$i-1] = $temp;  
	}
	return $str;
}

var_dump(reverse(123));

思考

1, 关键是字符串的长度,用它来对每个字符进行定位;

2, 据说还有更好的方法,因为字符串是一种特殊的数据结构(参考之前的zval文章),现在还没想到;

3, 可以用数组,图形函数做处理;

转载于:https://my.oschina.net/u/3412738/blog/1550374

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值