字符串反转实现的几种方式

方式一:将字符串反向输出来,不改变内存(递归实现)

void reverse_string(char *str)
{
	/*遇到'\0'什么也不做,函数结束*/
	if(*str == '\0')
		;
	else
	{
		/*输出下一个*/
		reverse_string(str + 1);
		cout<<*str;
	}
}

方式二:改变内存(交换法)

/*非递归实现:操作内存*/
char *reverse_string1(char *str)
{
	char *left = str;  	//存放字符数组的最左边
	char *right = str;      //存放字符数组的最右边

	while(*right != '\0')
	{
		right++;
	}
/*while循环之后,right指向'\0',right--之后,指向最后一个非'\0'字符*/
	right--;

	/*左右对称的两个元素交换*/
	char temp;
	while(left < right)
	{
		temp = *left;
		*left = *right;
		*right = temp;
		left++;
		right--;
	}
	return str;
}

方式三:改变内存(递归实现)

/*递归实现:操作内存*/
/*递归每调用一次:要反转的字符串头和尾各减少一个*/
char *reverse_string2(char *str)
{
	int lenth = strlen(str);
	/*空字符串lenth=0或者lenth=1只有一个有效字符的字符串无需反转*/
	if(lenth <= 1)
	{
		return NULL;
	}
	char temp;
    /*当字符串至少存在两个非'\0'字符时才用的到反转*/
	if(lenth > 1)
	{
		temp = str[0];
		str[0] = str[lenth-1];

		/*最后一个字符在下次递归时不再处理*/
		str[lenth - 1] = '\0';
		/*递归每调用一次,要反转的字符串头和

尾各减少一个*/
		reverse_string2(str + 1);
		str[lenth-1] = temp;//(利用站先入后出的特性)
	}
	return str;
}

测试:

#include<stdio.h>
#include<iostream>
using namespace std;
/*递归实现:操作内存*/
/*递归每调用一次:要反转的字符串头和尾各减少一个*/
char *reverse_string2(char *str)
{
	int lenth = strlen(str);
	/*空字符串lenth=0或者lenth=1只有一个有效字符的字符串无需反转*/
	if(lenth <= 1)
	{
		return NULL;
	}
	char temp;
    /*当字符串至少存在两个非'\0'字符时才用的到反转*/
	if(lenth > 1)
	{
		temp = str[0];
		str[0] = str[lenth-1];

		/*最后一个字符在下次递归时不再处理*/
		str[lenth - 1] = '\0';
		/*递归每调用一次,要反转的字符串头和

尾各减少一个*/
		reverse_string2(str + 1);
		str[lenth-1] = temp;//(利用站先入后出的特性)
	}
	return str;
}

/*非递归实现:操作内存*/
char *reverse_string1(char *str)
{
	char *left = str;  	//存放字符数组的最左边
	char *right = str;  //存放字符数组的最右边

	while(*right != '\0')
	{
		right++;
	}
/*while循环之后,right指向'\0',right--之后,指向最后一个非'\0'字符*/
	right--;

	/*左右对称的两个元素交换*/
	char temp;
	while(left < right)
	{
		temp = *left;
		*left = *right;
		*right = temp;
		left++;
		right--;
	}
	return str;
}
void reverse_string(char *str)
{
	/*遇到'\0'什么也不做,函数结束*/
	if(*str == '\0')
		;
	else
	{
		/*输出下一个*/
		reverse_string(str + 1);
		cout<<*str;
	}
}
int main()
{
	char str1[] = "ABCDEFGH";
	char str2[] = "ABCDEFGH";
	char str3[] = "ABCDEFGH";
	cout<<reverse_string1(str1)<<endl;
	cout<<reverse_string2(str2)<<endl;
	reverse_string(str3);
	cout<<endl;
	return 0;
}

时间: 2024-11-08 20:07:34

字符串反转实现的几种方式的相关文章

Java字符串反转常见的几种方式?

(1)通过StringBuilder的reverse()方法,速度最快: 1 public class StringReverse { 2 public static void main(String[] args) { 3 String str="hello"; 4 System.out.println(reverse(str)); 5 6 } 7 public static StringBuilder reverse(String str){ 8 return new String

javascript消除字符串两边空格的两种方式,面向对象和函数式编程

主要是javascript中消除字符串空格,比较两种方式的不同 //面向对象,消除字符串两边空格 String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ""); }; //去左右空格的函数; function trim(s){ return s.replace(/(^\s*)|(\s*$)/g, ""); }调用消除空格的两种方式. var defualtPhone =

C# 对象与JSON字符串互相转换的几种方式

出自:http://blog.csdn.net/testcs_dn/article/details/78150046?locationNum=6&fps=1 目录(?)[-] 方法一DoNet20 需要借助于NewtonsoftJsondll 方法二DataContractJsonSerializer 方法三JavaScriptSerializer 功能对比 性能对比 JSON转C实体类 相关参考 c json数据解析将字符串json格式数据转换成对象 Jsonnet实现方便的Json转Cdyn

js中将字符串转为JSON的三种方式

1.eval方式解析,恐怕这是最早的解析方式了.如下: function strToJson(str){ var json = eval('(' + str + ')'); return json; } 2.new Function形式,比较怪异哦.如下: function strToJson(str){ var json = (new Function("return " + str))(); return json; } 3.使用全局的JSON对象,如下: function str

python中反转列表的三种方式

1.内建函数reversed() li =[1, 2, 3, 4, 5, 6] a = list(reversed(li)) print (a) 注意:reversed()函数返回的是一个迭代器,而不是一个List,所以需要list函数转换一下 2.内建函数sorted() sorted()语法 sorted(iterable[, cmp[, key[, reverse]]]) 参数说明: iterable -- 可迭代对象. cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象

Python 字符串格式化输出的3种方式

1.  %      print ('我叫%s, 身高%scm'  % (name,height))   ** 传入的值为元组,依次填充 %s :占位符 str()      %d-:十进制 整数    %x : 十六进制    %f  :浮点型    指定长度:         %5d     右对齐,不足左边补空格        %-5d    - 代表左对齐,不足右边默认补空格        %05d    右对齐,不足左边补0          浮点数:            %f   

C# 自动计算字符串公式的值(三种方式)

http://www.csframework.com/archive/2/arc-2-20110426-1394.htm 提供数据的WebForm2.aspx [csharp] view plain copy public partial class WebForm2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string callback = Request.QueryString

python3反转列表的三种方式

1.内建函数 reversed() 1 li = [1,2,3,4,5,6] 2 a = list(reversed(li)) 3 print(a) 注意:reversed()函数返回的是一个迭代器,而不是一个List,所以需要list函数转换一下 2.内建函数sorted 语法 sorted(iteralbe,key=None,reverse=False iterable,用来比较的参数 key用来比较的元素 reverse-排序规则, reverse = True(降序    reverse

Java实现字符串反转

对于使用Java字符串反转有以下几种实现: 利用StringBuilder类中的reverse函数: 使用递归,将String的首字符放到除首字符外的子串后,然后再递归调用子串: 使用字符数组做reverse: public class Reverse { public static String reverse1(String str) { if (str == null || str.length() <= 1) return str; return new StringBuilder(st