数据结构与算法-字符串反转

百度2014笔试题: 字符串反转,要求不能使用系统函数,参数和返回值都是char指针。

</pre><pre name="code" class="cpp">#include <stdio>
char *reverse_str(char *str){
	int length=0;
	char *start=str;     //可以复制指针
	while(*start){      //“指针不为空”的表示法
		length++;
		start++;
	}
	int i;
	char tmp;
	for (i=0;i<length/2;i++){
		tmp=str[i];      //c++操作字符串:数组元素值=直接用头指针加[]下标,指针位置不变
		str[i]=str[length-1-i];
		str[length-1-i]=tmp;
	}
	return str;
}

int main(){
	char arr[]="hello world";
	char *str=arr; // 意思是char *str=&arr[0]
	char *newstr=reverse_str(str); 
	printf("%s", newstr); // 用char数组头指针输出整个字符串
	return 0;
}




总结:
1. 指针不为空-方法a:while(*str){}
        -方法b:  while(*str!='\0'){} // 必须是单引号,双引号表示string
2. 数组元素值操作-方法a
tmp=*str;
*str=*end;
*end=tmp;
                -方法b:
tmp=str[i];
str[i]=str[length-1-i];
str[length-1-i]=tmp;

待解问题:
http://blog.csdn.net/michellechouu/article/details/46787949 
该方法为void,函数里str最后指向字符串中间元素,为什么printf(“%s”,str)可以输出整个反转的字符串?
假设:str在作为函数参数时,相当于复制了一个str指针,函数里面的str++操作并不改变原本的str指针,而只是改变了复制的str指针。


参考文章:
http://www.1dke.com//bianchengxuexi/76.html
http://blog.csdn.net/michellechouu/article/details/46787949 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值