人生如逆旅,我亦是行人!江湖人称wsjjeremy.blog.chinaunix.net
ubuntuer
全部博文(930)
intern(3)
string(19)
正则表达式(5)
2011年(60)
2010年(220)
2009年(371)
2008年(279)
baocheng
nba76ers
renjian2
qq576709
mcn304
zibuyule
西农魔峰
曾德标
zhuqing_
shanck
tendy
moshangx
wb123456
smile124
hjshajsh
chenhong
bzhao
python16
分类: LINUX
2009-08-18 16:56:58
#include <stdio.h>#include <stdlib.h>#define MAX 50int is_lowercase(char a){ if(a>='a'&&a<='z') return 1; return 0; }void swap(char* a, char* b){ char tmp = *a; *a = *b; *b = tmp; }char* change_a_before_A(char* str){ int i = 0; int j = -1; int len = strlen(str); for(; i<len; i++) { if(is_lowercase(str[i])) { j++; swap(str+j,str+i); } } }int main(int argc, char *argv[]){ char str[MAX] = "aBDErekrkDSLKHDAsaa"; printf("the original str:\n%s\n",str); change_a_before_A(str); printf("after the str:\n%s\n",str); system("PAUSE"); return 0;}
应该没有比这个用更少的时间和空间的了
上一篇:google 2009笔试题-正整数序列Q
下一篇:图邻接矩阵 拓扑排序 无权广度优先搜索
bedreaming2009-08-21 15:03:58
看了一下,你有没有考虑change_a_before_A的循环中经常会进行无谓的swap?比如当str[0]是小写时,执行了swap(str[0],str[0]),而且有的大写字母要经过多次交换才能排到后面。 这种写法效率太低了,采用首尾指针的方法要好得多。
ubuntuer2009-08-21 12:41:58
不太懂阁下意思,个人看了下你这样是有问题的!!! 望详解. aBcd j=-1,i=0 str[0]是小写,j==i-1不换 j=-1,i=2 str[2]是小写,j!=i-1换 j++, str[0]和str[2]交换 无意义!!!!! 个人觉得你的要是对的,快排这个经典的东西也要重写了^_^ 不知道我理解的对不
chinaunix网友2009-08-21 11:47:08
还可以优化啊,if (is_lowercase(str[i]) && j != i - 1)
登录 注册