用不同的方法实现字符串的逆序输出(C语言实现)

用不同的方法实现字符串的逆序输出(C语言实现)

今天去面试遇到面试题如下:

请将字符串"123456",逆序输出?

当时我使用是指针,我后来想到的其他实现方法。

实现如下:

#include <stdio.h>
#include <string.h>

/////////////////////////
//用指针实现字符串的逆序 
char* reverse_pointer(char* str)
{
	char* head = str;
	char* end = str;
	char* temp = str;//保存str的地址 
	char ch;
	printf("head:%p\n", head);
	
	//将end指针指向string的结束符‘\0‘ 
	while( *end != ‘\0‘ )
	{
		end++;
	}
	printf("end:%p\n", end);
	
	//将end指针指向string结束符的前一个位置 
	end = end -1;
	printf("end2:%p\n", end);
	
	//当head指针的地址 < end指针的地址时
	//就交换head,end所指向的内容 
	while(head < end)
	{
		ch = *end;
		*end = *head;
		*head = ch;
		head++;//head指针走向下一个 
		end--; //end指针走向上一个 
	}
	return temp;
}


/////////////////////////
//字符串逆序输出的递归算法
//方法1
void reverse_print(char *str)
{
	if (*str == ‘\0‘) return;
		
	reverse_print(str+1);
	printf("%c", *str);
}

//方法2
void reverse_print2(char *str)
{
	for(int i=strlen(str); i>0; i--)
	{
		printf("%c", *(str+i-1) );
	}
}

/////////////////////////
// 数组方法实现
// 函数参数要为数组 
void reverse_array(char str[])
{
	char ch;
	int len = strlen(str);
	
	// (len/2)找到字符串的中点,交换以中点对称的数组元素 
	for(int i=0; i<(len/2); i++)
	{
		ch = str[i];
		str[i] = str[len-1-i];//字符串首位对应位置交换
		str[len-1-i] = ch; 	
	}
}
/////////////////////// 
int main()
{
	char str[] = "123456";
	printf("reverse before:%s\n", str);
	//reverse_print(str);
	//reverse_print2(str);
	//reverse_array(str);
	//char *str2 = reverse_pointer(str);
	
	//printf("reverse after:%s\n", str2);
	return 0;
}

以上方法仅供参考!

文明看帖,谢谢勿喷

有更好的方法欢迎交流!


用不同的方法实现字符串的逆序输出(C语言实现)

上一篇:从3个程序理解C++类实例大小


下一篇:C++编程规范之45:总是一起提供new和delete