计算机二级考试C语言编程解读:排查字符串查找代码错误

给定程序MODI1.C中, 函数fun的功能是:逐个判断字符串s2中的字符是否在字符串s1中出现过, 并把出现过的字符按照原来在s2中的顺序形成新字符串s3, 不去除重复字符。
例如, 当s1为:"abcdefghijk", s2为:"zbcyedmnpggn" 时, 则s3应该是:"bcedgg"
请改正函数fun中指定部位的错误, 使它能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构 !

考点:函数

MODI1.C代码文件

#include <stdio.h> 
#include <string.h> 
void fun( char *s1, char *s2, char *s3)
{   int i,j,k=0;
	for(i = 0; i<strlen(s2); i++)  
	{	for(j = 0; j<strlen(s1); j++)  
/**********************found***********************/
			if (s2[i] != s1[j])
			   break;
/**********************found***********************/
		if (j>=strlen(s1))
/**********************found***********************/
			s3[++k]=s2[i];
	}
	s3[k] = '\0';
}
void main() 
{	char s1[128], s2[128], s3[128];  
	printf("Please input string1:"); 
	gets(s1);   
	printf("Please input string2:");  
	gets(s2);    
	fun(s1,s2,s3);
	printf("string:%s\n", s3);   
}

试题解读:

(1) 根据题意, fun函数在循环中需要判断s2[i]是否在s1中出现, 所以将s2[i]与s1的每一个字符进行比较, 如果与s1[j]相等, 说明s2[i]在s1中出现了, 跳出s1的循环, 第一空修改为:if (s2[i] == s1[j]) 。

(2) 内嵌的s1循环结束后, 需要判断j是否遍历完s1字符串, 若j小于strlen(s1), 说明在内嵌的循环中执行了break语句, 满足s2[i] == s1[j], s2[i]在s1中出现了, 需要存放到s3中; 若j不小于strlen(s1), 说明内嵌的for循环是循环条件不满足终止的, s2[i]在s1中未出现, 不需要存放到s3中; 所以第二空修改为:if (j < strlen(s1)) 。

(3) 由(2)可知若j小于strlen(s1), 说明在内嵌的循环中执行了break语句, 满足s2[i] == s1[j], s2[i]在s1中出现了, 需要存放到s3中, 由于k初值为0, 所以k表示当前应该存放的下标, s2[i]存放到s3[k]中后, k再自增1。

参考答案:

(1) if (s2[i] == s1[j])

(2) if (j < strlen(s1))

(3) s3[k++] = s2[i];

---------------------------------------------------------------------------------------------------------------------------------

编程训练营APP

计算机二级考试学习刷题工具

安卓手机应用商店

搜索编程训练营下载
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值