字符串的反转

1 普通的字符串反转函数

int inverse(char  *str)
{    
    int length;
    char *p1;
    char *p2;
    p1 = str;
    length = strlen(str);
    p2 = str + length -1;
    if(str == NULL)
    {
        return -1;
    }
    while(p1 <p2)
    {
        char c = *p1;
        *p1 = *p2;
        *p2 = c;
        ++p1;
        --p2;
    }        
    return 0;
}

2 递归逆序的字符串反转

//通过递归的方式,逆向打印
//递归和全局变量(把逆序的结果存入全局变量)

char g_buf[1000];  //全局变量
void
inverse3(char *p) { if(p == NULL) { return ; } if(*p == '\0') { return ; } inverse3(p+1); //strcat(g_buf, p); //把p所指向的内存空间拷到g_buf; //strncpy(g_buf, p, 1); //在p所指向的内存空间,每次只拷贝一个字符到g_buf,覆盖型拷贝 strncat(g_buf, p, 1); //在p所指向的内存空间,每次只拷贝一个字符到g_buf,链接型拷贝 }

//递归和非全局变量(递归指针做函数参数)

void inverse4(char *p, char *bufresult)
{
    if(p == NULL || bufresult == NULL)
    {
        return ;
    }
    if(*p == '\0')
    {
        return ;
    }
    inverse4(p+1, bufresult);
    //strcat(g_buf, p);  //把p所指向的内存空间拷到g_buf;
    //strncpy(g_buf, p, 1); //在p所指向的内存空间,每次只拷贝一个字符到g_buf,覆盖型拷贝
    strncat(bufresult, p, 1); //在p所指向的内存空间,每次只拷贝一个字符到g_buf,链接型拷贝
}
int main(void)
{
    char buf[] = "abcdefg";
    {
        char mybuf[1024] = {0};
        inverse4(buf, mybuf);
        printf("mybuf: %s\n", mybuf);
    }   
    return 0;
}

 

posted @ 2017-04-30 18:41  Liu_Jing  Views(232)  Comments(0)    收藏  举报