![](https://lstatic.shangxueba.com/jiandati/h5/images/m_q_title.png)
下列函数的功能是set(s,t){ char *s,*t; while((*s)&&(*t)&&(*t++==*s++)); return(*s-*t);}
A.求字符串的长度
B.比较两字符串的大小
C.将字符串s复制到字符串t中
D.将字符串s连接到字符串t后
A.求字符串的长度
B.比较两字符串的大小
C.将字符串s复制到字符串t中
D.将字符串s连接到字符串t后
试题二(共15分)
阅读以下说明和C函数,将应填入 (n) 处的语句或语句成分写在答题纸的对应栏内。
【说明1】 函数deldigit(char *s) 的功能是将字符串s中的数字字符去掉,使剩余字符按原次序构成一个新串,并保存在原串空间中。其思路是:先申请一个与 s 等长的临时字符串空间并令t指向它,将非数字字符按次序暂存入该空间,最后再拷贝给s。
【C函数】
void deldigit(char *s)
{
char *t = (char *)malloc((1) ); /*申请串空间*/
int i, k = 0;
if (!t) return;
for(i = 0; i < strlen(s); i++)
if (!(*(s+i)>='0' && *(s+i)<='9') ) {
t[k++] = (2) ;
}
(3) = '\0'; /*设置串结束标志*/
strcpy(s,t);
free(t);
}
【说明2】
函数reverse(char *s, int len)的功能是用递归方式逆置长度为 len的字符串s。例如,若串s的内容为“abcd” ,则逆置后其内容变为“dcba” 。
【C函数】
void reverse(char *s, int len)
{
char ch;
if ((4) )
{
ch = *s;
*s = *(s+len-1);
*(s+len-1) = ch;
reverse((5) );
}
}
试题四(共 15分)
阅读以下说明和C函数,将解答填入答题纸的对应栏内。
【说明】
函数del_substr(S,T)的功能是从头至尾扫描字符串 S, 删除其中与字符串T相同的所有子串,其处理过程为:首先从串 S 的第一个字符开始查找子串 T,若找到,则将后面的字符向前移动将子串T覆盖掉,然后继续查找子串T,否则从串S的第二个字符开始查找,依此类推,重复该过程,直到串S的结尾为止。该函数中字符串的存储类型 SString
定义如下:
typedef struct {
char *ch; /*串空间的首地址*/
int length; /*串长*/
}SString;
【C函数】
void del_substr(SString *S, SString T)
{
int i, j;
if (S->length < 1 || T.length < 1 || S->length < T.length )
return;
i = 0; /* i为串S中字符的下标 */
for (; ; ) {
j = 0; /* j为串T中字符的下标 */
while (i < S->length && j < T.length ) { /* 在串S中查找与T相同的子串 */
if (S->ch[i]==T.ch[j] ) {
i++; j++;
}
else {
i = (1) ; j = 0; /* i值回退,为继续查找T做准备 */
}
}
if ((2) ) { /* 在S中找到与T相同的子串 */
i = (3) ; /* 计算S中子串T的起始下标 */
for(k = i+T.length; k<S->length; k++) /* 通过覆盖子串T进行删除 */
S->ch[ (4) ] = S->ch[k];
S->length = (5) ; /* 更新S的长度 */
}
else break; /* 串S中不存在子串T*/
}
}
下列程序的功能是:求出ss字符串中指定字符c的个数,并返回此值。请编写函数int num(*char ss,char c)以实现程序要求,最后调用函数readwriteDat(),把结果输出到文件out.dat中(注:大小写字母有区别)。例如:若输入字符串“ss="123412132" , c=’1’”,则输出“3”。部分源程序已给出。请勿改动主函数main()和输出数据函数writeDat()的内容。#include <conio.h>#include <stdio.h>#define M 81void readwriteDAT(); int num(char *ss,char c){ } main(){ char a[M],ch; clrscr(); printf("\nPlease enter a string:" );gets(a); printf("\nPlease enter a char;" );ch=getchar(); printf("\nThe number of the char is:%d\n" ,num(a,ch)); readwriteDAT();}viod readwriteDAT(){ int i; FILE *rf,*wf; char a[M],b[M],ch; rf=fopen("in.dat" ,"r" ); wf=fopen(" out.dat" ,"w" ); for(i=0;i<10;i++){ fscanf(rf," %s",a); fscanf(rf," %s" ,b); ch=*b; fprintf(wf," %c=%d\n:" ,ch,num(a,ch));} fclose(rf); fclose(wf);}
阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
【说明1】 递归函数is_elem(char ch, char *set)的功能是判断ch中的字符是否在set表示的字符集合中,若是,则返回1,否则返回0。 【C代码1】 int is_elem (char ch ,char*set) { If(*set==‘\0’) return 0; else If((1) ) return 1; else return is_elem((2) ) } 【说明2】 函数char*combine(char* setA,char *setB)的功能是将字符集合A(元素互异,由setA表示)和字符集合B(元素互异,由setB表示)合并,并返回合并后的字符集合。 【C代码2】 char*combine(char *setA, char*setB) { int i,lenA, lenB, lenC; lenA=strlen(setA); lenB=strlen(setB); char*setC=(char*)malloc(lenA+lenB+1); if(!setC) return NULL; strncpy(setC,setA,lenA); //将setA的前lenA个字符复制后存入setC lenC= (3) ; for(i=0;i<lenB;i++) if((4) ) //调用is_elem判断字符是否在setA中 setC[lenC++]=setB[i]; (5) =‘/0’; //设置合并后字符集的结尾标识 return setC; }
下列给定程序中,函数fun()的功能是:利用插入排序法对字符串中的字符按从大到小的顺序进行排序。插入法的基本方法是:先对字符串中的头两个元素进行排序,然后把第3个字符插入到前两个字符中,插入后前3个字符依然有序;再把第4个字符插入到前3个字符中,待排序的字符串已在主函数中赋予。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
include <string.h>
include <stdio.h>
define N 80
void insert(char *aa)
{
int i,j,n; char ch;
n=strlen(aa);
for(i=1;i<n;i++)
{
ch=aa[i];
j=i-1;
/*************found*************/
while((j>=0)||(ch>aa[j]))
{
aa[j+1]=aa[j];
j--;
}
/*************found*************/
aa[j]=ch;
}
}
main()
{
char a[N]="JRTYDFKLIOPQWEGHMNBVCUASXZ";
int i;
printf("The original string: %S\n",a);
insert(a);
printf("The string after sorting:%S\n\n",a);
}
下列给定程序中,函数fun()的功能是;利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本方法是:先对字符串中的头两个元素进行排序,然后把第3个字符插入到前两个字符中,插入后前3个字符依然有序;再把第4个字符插入到前3个字符中,待排序的字符串已在主函数中赋予。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.
试题程序:
include <String.h>
include <stdio.h>
define N 80
void insert(char *aa)
{ iht i, j, n; char ch;
n=strlen (aa);
for (i=1; i<n; i++)
/**********************************/
{ c=aa[i];
j=i-1;
while ((j>=0) && (ch<aa [j] ))
{ aa [j+l]=aa[j];
j--;
}
aa [j+l]=ch;
}
}
main ()
{ char a [N] = "QWERTYUIOPASDFGHJKIMNBVCXZ";
int i;
printf("The original string: %s\n",a);
insert (a);
printf("The string after sorting:
%s\n\n", a);
}
请补充函数fun(),该函数的功能是;删除字符数组中小于等于指定字符的字符,指定字符从键盘输入,结果仍保存
例如,输入“abcdefghij”,指定字符为‘d’,则结果输出“defghij”。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
include <stdio. h>
define N 80
void fun (char s[], char ch)
{
int i=0, j=0;
while (s [i] )
{
if (s Iii<ch)
【 】;
else
{
【 】
i++;
}
}
【 】
}
main ()
{
char str [N], ch;
clrscr ();
printf("\n Input a string:\n");
gets (str);
printf("\n*** original string ***\n");
puts (str);
printf("\n Input a character:\n");
scanf ("%c", &ch);
fun(str, ch);
printf("\n*** new string ***\n");
puts (str);
}
A.比较两个字符串的大小
B.计算s所指字符串占用内存字节的个数
C.计算s所指字符串的长度
D.将s所指字符串复制到字符串t中
为了保护您的账号安全,请在“简答题”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!