字符串翻转的两种方法(1:利用额外空间 2:交换)

#include<iostream>
using namespace std;
#define STRLENTH 100

char *str_reverse1(char *str)
{
	char temp[STRLENTH];//字符数组:存放逆序后的字符
	char *p = str;      //字符指针:指向最后一个非'\0'字符
	int i = 0;

	/*找到最后一个非'\0'字符并使p指向它*/
	while(*p != '\0')
	{
		p++;//while循环之后p指向'\0'p--后指向数组的最后一个字符(非'\0')
	}
	p--;

	/*将逆序后的字符存放在临时空间temp中*/
	while(p != str)
	{
		temp[i] = *p;
		i++;
		p--;
	}
	temp[i] = *p;    //while循环之后第一个字符未存放进去
	temp[i+1] = '\0';//数组末尾f赋'\0'

	/*将逆序之后的字符拷贝到原数组中*/
	strcpy(str,temp);
	return str;

}
char *str_reverse2(char *str)
{
	char *p = str;  //字符指针:指向最后一个非'\0'字符
	char *ret = str;//字符指针: 用于返回数组的首地址

	/*找到最后一个非'\0'字符并使p指向它*/
	while(*p != '\0')
	{
		p++;
	}
	p--;
	/*对称的字符交换---->达到字符的翻转*/
	char tmp;
	while(str < p)
	{
		tmp  = *str;
		*str = *p;
		*p   = tmp;
		str++;
		p--;
	}
	return ret;
}

int main()
{
	char str[] = "abcdefghij";
	cout<<str_reverse2(str)<<endl;
	return 0;
}

时间: 2024-07-30 10:18:15

字符串翻转的两种方法(1:利用额外空间 2:交换)的相关文章

实现数组字符串翻转的两种方法

//第一种方法:递归法 #include <stdio.h> int reverse_string(char * string) {  if (*string != '\0')  {      reverse_string(string+1);      printf("%c", *string);  } } int main() {  char *string = "abcde";  printf("源字符串为:%s\n", str

将单链表翻转的两种方法

将一个单链表翻转的描述很简单,例如: 输入: NODE1->NODE2->NODE3->NODE4->NODE5->NULL 输出: NODE5->NODE4->NODE3->NODE2->NODE1->NULL 那么,定义单链表如下: (为简单起见,将data字段定义为int, 当然实际应用中data很可能是一个复杂的结构体) typedef struct list_s { int data; struct list_s *next; } li

Python 中格式化字符串 % 和 format 两种方法之间的区别

Python2.6引入了 format 格式化字符串的方法,现在格式化字符串有两种方法,就是 % 和 format ,具体这两种方法有什么区别呢?请看以下解析. # 定义一个坐标值 c = (250, 250) # 使用%来格式化 s1 = "敌人坐标:%s" % c 上面的代码很明显会抛出一个如下的TypeError: TypeError: not all arguments converted during string formatting 像这类格式化的需求我们需要写成下面丑陋

javascript 实现字符串反转的两种方法

第一种方法:利用数组方法 //先split将字串变成单字数组,然后reverse()反转,然后将数组拼接回字串 var str = "abcdef"; str.split("").reverse().join('') 第二种方法:暴力遍历 var str="abcdef" ,str2=""; var i=str.length; i=i-1; for (var x = i; x >=0; x--) { str2 += st

字符串的全排列两种方法

输入一个字符串,其含有的字符各不相同.程序输出该字符串的所有排列(全排列)情形. void f(char *str, int len, int n) { int i; char tmp; char *p = (char *)malloc(len+1); if(n==len-1){ printf("%s\n",str); }else{ for(i=n;i<len;i++){ strcpy(p,str); tmp = *(str+n); *(str+n) = *(str+i); *(

JS中字符串倒序的两种方法

var reverse = function( str ){ var stack = [];//生成一个栈 for(var len = str.length,i=len;i>=0;i-- ){ stack.push(str[i]); } return join(''); }; reverse('hey there'); ## 另一种更为简便的方法 var reverse = function( str ){ return str.split('').reverse().join(''); };

table中超长字符串省略号表示两种方法

写在前面:   1.第一种从网上找到的解决方式添加table-layout:fixed   2.第二种添加div   3.字符串过长产生省略号的css语句为如下三种合用:overflow:hidden;text-overflow:ellipsis;white-space:nowrap;但是在table中并不起作用,即使给td固定宽度,依然会被撑开,解决方案如下 1. 效果显示: table{ width:360px; height:40px; table-layout: fixed; } 在ta

字符串拼接的两种方法

1.普通的拼接: 1 var htmlSpan = ""; 2 for (var j = 0; j < len - 1; j++) { 3 htmlSpan += '<span>我是拼接生成的字符串</span>'; 4 } 5 htmlSpan += '<span class="on">·</span>'; 6 $(".dots").html(htmlSpan); 2.使用数组的方法: 1

java中按字节获得字符串长度的两种方法

jdk本身就自带获取字符串字节长度的api了,但字符串如果包含特殊符号或全半角符号或标点符号获取到的结果会有偏差,最好的证据就是新浪微博的字数统计了 // jdk自带的获取字节长度 //注意getBytes()默认获取的是以文件编码格式的bytes,通常都是UTF-8(可以看api),不同编码格式的bytes,获取到的长度也不同,本人亲自测试过,建议获取有指定编码格式的bytes长度,如:getBytes("UTF-8") int length = new String().getBy