Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1634782
  • 博文数量: 197
  • 博客积分: 10046
  • 博客等级: 上将
  • 技术积分: 1983
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-07 12:36
个人简介

在外企做服务器开发, 目前是项目经理, 管理两个server开发的项目。不做嵌入式好久了。

文章分类
文章存档

2011年(2)

2010年(6)

2009年(18)

2008年(30)

2007年(100)

2006年(41)

分类: LINUX

2008-10-31 01:13:40

 
面试的时候,我看有人总爱问个转置字符串的问题,细细想来确实是个应该好好想想的问题:
 
特意想来,写了两个以作比较, 留个备忘,一旦别人问起来,也能答上。
 
 
其实,数据结构, 就是应该平时多写多练,就当时锻炼大脑。
 
 
 
1,效率不高,空间复杂度高了:
 

//for example abcd -> dcba

char * convert_string(char *str)
{
    int length = strlen(str);
    char * tmp_buffer = (char *)malloc(length * sizeof(char));
    int i;
    
    for(i=length-1;i>=0;--i)
    {
        tmp_buffer[length-1-i] = str[i];
    }
    
    strcpy(str,tmp_buffer);
    
    free(tmp_buffer);
    
    return str;
}

 

2, 肯定是最简单的了:对奇数个字符还是偶数个字符都适用。

11个字符,中间那个就不用动了,

如果是12个字符, 正好前后互动。a[0] = a[11] ,a[1] = a[10] ,

反正是 a[x] = a[y] ; 条件是 x+y = 字符个数。

char *convert_string(char *str)
{
    //其实最简单了。

    int length = strlen(str);
    int i =0;
    
    for(i=0;i<length/2;++i)
    {
        char c ;
        c = str[i];
        str[i] = str[length-1-i];
        str[length-1-i] = c;
    }
    /*
 abcdefghijk
 k         a
  j       b
   i     c
    h   d
     g e
      f
 */
    return str;
}

最后的测试程序:

 

int main(void)
{
    char buffer[100] = {'\0'};
    
    printf("please input string:\n");
    scanf("%s",&buffer);
    printf("old=%s\n",buffer);
    printf("after conversion:%s\n",convert_string(buffer));    
    return 0;
}
    

 

 

please input string:
old=zhanglinbao12345678901234xyzlmnLMN
new=NMLnmlzyx43210987654321oabnilgnahz

阅读(1849) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~