首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下说明和C代码,填写程序中的空缺,将解答写入答题纸的对应栏内。 【说明】 函数strCompress(char *s)对小写英文字母串进行压缩,其基本思路是:如果串长小于3则不压缩,否则对连续出现的同一字符,用该字符及其个数来表示。例如,字符
阅读以下说明和C代码,填写程序中的空缺,将解答写入答题纸的对应栏内。 【说明】 函数strCompress(char *s)对小写英文字母串进行压缩,其基本思路是:如果串长小于3则不压缩,否则对连续出现的同一字符,用该字符及其个数来表示。例如,字符
admin
2021-03-24
42
问题
阅读以下说明和C代码,填写程序中的空缺,将解答写入答题纸的对应栏内。
【说明】
函数strCompress(char
*
s)对小写英文字母串进行压缩,其基本思路是:如果串长小于3则不压缩,否则对连续出现的同一字符,用该字符及其个数来表示。例如,字符串"abbbcdddddddeeed"压缩后表示为"ab3cd7e3d"。
如图4.1所示,在计算连续出现的同一字符个数时,借助字符指针s和计数变量k表示串中的字符,当s所指字符与其后的第k个字符不同时,个重复字符串的压缩参数即可确定。
【C代码】
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void strCompress(char
*
);
int main()
{
char test[] = "abbbcdddddddeeed";
printf("%s\n",test);
(1)
; //调用strCompress实现test中字符串的压缩
printf("%s\n",test);
return 0;
}
void strCompress(char
*
str)
{
int i;
chat
*
p,tstr[11]; //在tstr中以字符串方式表示同一字符连续出现的次数
char
*
s=str,
*
buf; //借助buf暂存压缩后的字符串
if(strlen(str)<3)
return;
bur=(char
*
)malloc(strlen(str)
*
sizeof(char)+1);
if(!buf)
return;
for(i=0;
*
s;){
int k=1; //用k累计当前字符的连续出现次数
buf[
(2)
]=
*
s; //先将当前字符写入buf[]
if(s[1] &&
*
s==
*
(s+1)){
k++;
while(
(3)
)k++;
sprintf(tstr,"%d",k); //将k的值转换为数字串暂存在tstr中
//将暂存在tstr中的数字字符逐个写入buf[]
p=tstr;
while(
*
p )
buf[i++]=
(4)
;
}
s+=k; //跳过连续出现的同一字符,使s指向下一个不同的字符
}
(5)
=’0’; //设置字符串结尾
strcpy(str,buf); //将暂存在buf中的压缩字符串复制给原串
free(buf);
}
选项
答案
(1)strCompress(test)或strCompress(&test[0])或等效形式 (2)i++ (3)
*
s==
*
(s+k)或s[0]==s[k]或
*
(s+k)&&
*
s==
*
(s+k)或s[k]&&s[0]==s[k]或等效形式 (4)
*
p++或等效形式 (5)buf[i]或buf[i++]或
*
(buf+i)或等效形式。
解析
本题考查C程序流程控制和字符串处理及指针的应用
空(1)处实现对函数strCompress的调用,根据strCompress的声明和定义,要求实参提供字符存储的地址,main函数中的字符数组test保存了需要压缩的字符串,因此空(1)应填入“strCompress(test)”或其等效形式。
在函数strCompress中,对需要压缩的字符串进行单向扫描,并将压缩结果暂存在buf[]中,最后再从buf复制回原字符串。
*
s表示待压缩字符串的当前字符,若
*
s(即s[0])是串的最后一个字符,则
*
(s+1)(即s[1])就是串结束标志字符‘\0’,将
*
s放入buf[]后,通过s+=k(k=1)使得s指向‘\0’从而结束for循环。若
*
s不是串的最后一个字符,则需要判断
*
s与
*
(s+1)是否相等,从而对连续出现的同一字符进行计数(k的值为次数)。结合遍历字符串中字符的for循环,可知空(2)处应填入“i++”,空(3)处应填入“
*
s==
*
(s+k)”或其等效形式。
设置压缩结果时,先将k的值转换为数字串暂存在tstr中,然后将暂存在tstr中的数字字符逐个写入buf[],因此空(4)应填入“
*
p++”或其等效形式。由于每次在buf[]中写入字符时都对下标i进行了自增,for循环结束后,buf
即表示压缩字符串最后一个字符之后的位置,因此空(5)处应填入“buff
”或其等效形式。
转载请注明原文地址:https://kaotiyun.com/show/82jZ777K
本试题收录于:
程序员下午应用技术考试题库软考初级分类
0
程序员下午应用技术考试
软考初级
相关试题推荐
在Excel2010的A1单元格中输入函数“=IF(1<>2,1,2)”,按回车键后,A1单元格中的值为________________。
为使双击指定类型的文件名就能调用相应的程序来打开处理它,需要将这种文件类型与相应的程序建立文件(23)。
在WindowsXP中,删除某个应用程序在桌面上的快捷方式,则(42)。
在Excel2010中,一个宗箱的函数计算包括()。
解决网络安全问题的技术分为主动防御保护技术和被动防御保护技术两大类,__________属于被动防御保护技术。
采购了多种品牌的部件进行计算机组装,每个部件都正常,连接、安装、配置操作也完全正确,但系统仍不能正常使用。很可能是____________问题。
综合布线系统由6个子系统组成,将图1-1中(1)~(6)处空缺子系统的名称填写在答题纸对应的解答栏内。制作交叉双绞线(一端按EIA/TIA568A线序,另一端按EIA/TIA568B线序)时,其中一端的线序如图1-2(a)所示,另一端线序如图1—2
阅读以下说明,回答问题1至问题4。说明某公司A楼高40层,每层高3.3米,同一楼层内任意两个房间最远传输距离不超过90米,A楼和B楼之间距离为500米,需在整个大楼进行综合布线,结构如图1-1所示。为满足公司业务发展的需要,要求为楼内客户机提供数
资源记录文件位于/var/named目录下。这个目录是在以上的(1)文件中定义的。从备选选项中选择(6)~(10)处的解答。在问题4的named.abc.net文件中,出现了5种类型的记录。其中SOA是(6),NS是(7),MX是(8),A是
随机试题
Somethingextraordinaryhappenedinthathospital.Aman,whowasdeclaredclinicallydead,suddenly______.
人体合成及供应全身胆固醇能力最强的组织是
小儿,4个月。1周前患上呼吸道感染,体温低热、咳嗽、流鼻涕。持续2~3天后症状减轻,但咳嗽逐渐加重,且以夜间更为明显。今日突发接连不断的痉挛性咳嗽数次,就医后诊为百日咳。该患儿特征性痉咳一般要持续()
患者,男,68岁,肺癌。行右上肺叶切除术。医嘱:全血200ml,ivgtt.。输血过程中患者面部出现荨麻疹,眼睑、口唇出现水肿,BP80/60mmHg,P120次/分,R25次/分。目前首选的措施是
根据我国民事诉讼法的规定,下列哪些案件的审理程序中公告是必经的程序?()。
以下关于检察官的任免,说法正确的是哪些?()
锚固按结构形式分为()。
甲有限责任公司属于工业企业,为增值税一般纳税人,适用13%的增值税税率,售价中不含增值税。商品销售时,同时结转成本。2020年12月甲有限责任公司发生如下经济业务: (1)本月销售商品一批,增值税专用发票上注明的售价300万元,增值税税额39万元,款项尚
社会治安综合治理是()的任务,作为负责国内安全和社会治安的公安机关,负有特殊的责任。
人生三境界:______,才能览物于胸;______,才能洞若观火;______,才能超然物外。此三重境界,形影交错,亦梦亦境,需反复思虑,不断探索,才能冲破重天驾驭人生。填入划横线部分最恰当的一项是:
最新回复
(
0
)