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