首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
2005年11月金山笔试题。编码完成下面的处理函数。函数将字符串中的字符’*’移到串的前部分,前面的非’*’字符后移,但不能改变非’*’字符的先后顺序,函数返回串中字符’*’的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,函
2005年11月金山笔试题。编码完成下面的处理函数。函数将字符串中的字符’*’移到串的前部分,前面的非’*’字符后移,但不能改变非’*’字符的先后顺序,函数返回串中字符’*’的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,函
admin
2019-03-29
93
问题
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://www.kaotiyun.com/show/cxmZ777K
0
程序员面试
相关试题推荐
Shedidherwork______hermanagerhadinstructed.
[A]TherelativelylowtuitionfeesinAsiaarealsoamaindrawforprospectivestudents.Lastyear,onlinehighereducationre
Weakdollarorno,$46,000—thepriceforasingleyearofundergraduateinstructionamidtheredbrickofHarvardYard—is【C1】__
DataReader和DataSet的异同
值类型和引用类型的区别?写出C#的样例代码。
ASP.NET能在那些系统中运行?
类CMyString的声明如下:classCMyString{public:CMyString(char*pData=NULL);CMyString(constCMyString&str);~CMyString(void);
请将"回收站"中名为"美丽城市.bmp"的文件删除。
在Excel97中的活动单元格中输入"1/5",默认情况下单元格内的显示是()。A.小数0.2B.分数1/5C.日期1月5日D.百分数20%
要清除磁盘中一些分散的、不连续的扇区空间以提高磁盘的读写速度,应使用WindowsXP系统工具中的()。
随机试题
关于肝脏海绵状血管瘤超声表现,不包括
A.薯蓣皂苷B.甘草酸C.甘草次酸D.剑麻皂苷E.黄芪苷甲甘草中具有甜味的成分是()。
关于急性结膜炎用药A、四环素、利福平滴眼剂B、0.1%羟苄唑滴眼剂C、醋酸可的松滴眼剂D、2%色甘酸钠滴眼剂E、0.1%碘苷滴眼剂对由细菌感染引起的急性卡他性结膜炎可选用
对于中小企业,财务报表附注不是必需的部分。
在事关重大的案件与事件的处置上,公安机关要及时请示(),以取得及时有力的领导。
最近三年来,捷达牌计算机的销量有了飞速的增长。而同一时期,该品牌用于电视广告的费用也明显增长了。因而有人认为,捷达牌计算机销量的增长,得益于其电视广告的促销作用。以下哪项为真,最能削弱上述结论?
肾损伤早期手术的适应证是
[*]
Youwillhearapieceofnews.Foreachquestion23-30,markoneletterA,BorCforthecorrectanswer.Youwillhearthereco
TheHopeProjectaimstobringhopetopeoplestrugglingwithadisabilityandtotheirfamilies.TheHopeProjectwasdesigned
最新回复
(
0
)