首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
2005年11月金山笔试题。编码完成下面的处理函数。函数将字符串中的字符’*’移到串的前部分,前面的非’*’字符后移,但不能改变非’*’字符的先后顺序,函数返回串中字符’*’的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,函
2005年11月金山笔试题。编码完成下面的处理函数。函数将字符串中的字符’*’移到串的前部分,前面的非’*’字符后移,但不能改变非’*’字符的先后顺序,函数返回串中字符’*’的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,函
admin
2019-03-29
80
问题
2005年11月金山笔试题。编码完成下面的处理函数。函数将字符串中的字符’*’移到串的前部分,前面的非’*’字符后移,但不能改变非’*’字符的先后顺序,函数返回串中字符’*’的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,函数并返回值为5。(要求使用尽量少的时间和辅助空间)
选项
答案
int change(char *str) /* 这个算法并不高效,从后向前搜索效率要高些 */ { int count = 0; /* 记录串中字符’*’的个数 */ for(int i=0, j=0; str[i]; i++) /* 重串首开始遍历 */ { if(str[i]==’*’){ /* 遇到字符’*’ */ for(j=i-1; str[j]!=’*’&&j>=0; j--) /* 采用类似插入排序的思想,将*前面 */ str[j+1]=str[j]; /* 的非*字符逐个后移,直到遇到*字符 */ str[j+1] = ’*’; count++; } } return count; } int main(int argc, char* argv[]) { char str[] = "ab**cd**e*12"; printf("str1=%s\n", str); printf("str2=%s, count=%d", str, change(str)); return getchar(); } // 终于得到一个比较高效的算法,一个网友提供,应该和金山面试官的想法一致。算法如下: int change(char *str) { int i,j=strlen(str)-1; for(i=j; j>=0; j--) { if(str[i]!=’*’){ i--; }else if(str[j]!=’*’){ str[i] = str[j]; str[j] = ’*’; i--; } } return i+1; }
解析
转载请注明原文地址:https://kaotiyun.com/show/cxmZ777K
0
程序员面试
相关试题推荐
TheUnitedStatesInterstateHighwaySystemisaninfrastructurefeatofunprecedentedproportions.Notonlydoesitjoinallfi
Weakdollarorno,$46,000—thepriceforasingleyearofundergraduateinstructionamidtheredbrickofHarvardYard—is【C1】__
求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
DataReader和DataSet的异同
更改计算机管理员用户John名称为lusi的类型为受限用户。
在当前界面【管理工具】窗口中,设置Windows密码策略,将密码长度最小值设置为8个字符。
Word的样式是一组巳命名的字符和()格式的组合。
在幻灯片播放过程中,要想停止播放,可以按()。A.End键B.Esc键C.Enter键D.Home键
工作表某两列分别存放北京和沈阳各月的销售情况,请依次按照“北京”及“沈阳”的顺序,对销售情况由低至高进行排序。
以下有关对象事件过程的说法中,错误的是________。
随机试题
The"balanceofnature"isnotanemptyphrase.Natureprovidesapopulationtooccupyasuitableenvironmentandcutsdownsurp
机体处于寒冷环境时,甲状腺激素分泌增多属于
A.神经调节B.体液调节C.自身调节D.神经分泌调节胰岛素和胰高血糖素对血糖浓度的调节属于
“寒者热之”的治疗方法主要适用于
色甘酸钠平喘作用的机制是
黑龙江人吃蔬菜有()种主要的形式。
个体生长有两个高峰期,第一个高峰出现在出生后的第一年,第二个高峰出现在青春发育期。这体现了个体心理发展的()。
Penicillinwasdiscoveredbychancein1928.
Ifyouwantajoboftakingcareofchildren,whichadwillyouanswer?Ifyouwereafemale,andwantedtorentaroomonApri
A、Becauseitprotectsyoufromgettingsunburnt.B、Becauseithelpsyougetaperfectlytannedskin.C、Becauseit’sinchargeof
最新回复
(
0
)