面试的时候,我看有人总爱问个转置字符串的问题,细细想来确实是个应该好好想想的问题:
特意想来,写了两个以作比较, 留个备忘,一旦别人问起来,也能答上。
其实,数据结构, 就是应该平时多写多练,就当时锻炼大脑。
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) |