用不同的方法实现字符串的逆序输出(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;
}
以上方法仅供参考!
文明看帖,谢谢勿喷!
有更好的方法欢迎交流!