面试笔试题总会遇到字符串反转的问题,网上的实现方式也很多。下面的实现是用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;
}
有什么不对的地方和更好的方法,请留言。谢谢。