一、导读:
将一个字符串逆序输出。
二、算法思想:
方案一:借用两个指针(一个头指针,一个尾指针),一个中间变量,在移动两个指针过程中不断交换两个指针得值。
方案二:新建一个长度一样的字符串,从原串最后一位向前复制到新串中,直接将第n-i-1位(n为串长)复制到新串第i位;
三、算法实例:
#include <stdio.h>
#include <stdlib.h>
char* reverse(char* src)
{
if (NULL == src) {
return NULL;
}
register_t tmp;
unsigned long s_len = strlen(src);
char *s = (char* ) src;
char *e = (char* ) (s + (s_len-1));
while (s < e) {
tmp = *s;
*s = *e;
*e = tmp;
++s;
--e;
}
return src;
}
char* reverse_0(char *dest,const char* src)
{
if (NULL == dest && NULL == src) {
return NULL;
}
int i = 0;
unsigned long len = strlen(src);
//串长为len,那src最后一个字符为src[len -1];dest[len]必须放'\0',
//所以dest的长度必须满足>=len+1;
while (i<len) {
dest[i] = src[len-i-1];
++i;
}
dest[len] = '\0';
return dest;
}
int main(int argc, const char * argv[])
{
const char ss[30] = "this";
char* ptr =(char*) malloc(30);
strcpy(ptr,ss);
printf("ptr[0] = [%s]\n",ptr);
reverse(ptr);
printf("ptr[1] = [%s]\n",ptr);
memset(ptr,0,30);
reverse_0(ptr, ss);
printf("ptr[2] = [%s]\n",ptr);
return 0;
}
四、结果:
ptr[0] = [this]
ptr[1] = [siht]
ptr[2] = [siht]