面试笔试题总会遇到字符串反转的问题,网上的实现方式也很多。下面的实现是用C语言实现的。
自己手敲,亲自测试通过;做下记录。直接上代码:
#include <stdio.h> #include <string.h> #define SIZE 1024 char *rev_str(char *str, int len); int main(int argc, char * argv[]) { char myStr[SIZE]; int len = 0; printf("Please input a string!\n"); // gets(myStr); scanf("%s", myStr); len = strlen(myStr); rev_str(myStr, len); printf("After the inverted string is %s!\n", myStr); return 0; } char *rev_str(char *str, int len) { char *start = str; char *end = str + len -1; char ch = '\0'; if(NULL == str) { printf("The param is invalid\n"); return NULL; } while(start < end) { ch = *start; *start++ = *end; *end-- = ch; } return str; }
上面是一种方法,下面是灵一种实现方式:(希望大家亲手敲一下)
#include <stdio.h> #include <string.h> #define SIZE 1024 char * myStrRev(char * const dest, const char * const src); int main(int argc, char * argv[]) { char mysrc[SIZE]; char mydest[SIZE]; printf("请输入一个字符串:\n"); scanf("%s", mysrc); myStrRev(mydest, mysrc); printf("After the inverted string is %s\n", mydest); return 0; } char * myStrRev(char * const dest, const char * const src) { int i = 0; int srclen = strlen(src); char * addr = dest; if(NULL == dest || NULL == src) { printf("The parame is invalid!!\n"); return NULL; } for(i = 0; i < srclen; i++) { *(dest + i) = *(src + srclen -i -1); } dest[srclen] = '\0'; return addr; }
有什么不对的地方和更好的方法,请留言。谢谢。