⑴ 初学编程,大家帮忙看下这道c语言题怎么做万分感谢
第一题审题关键:题目中的转换规则就是字母在数组中第一次出现的顺序(顺序是从0开始自增)。
(注意数字是自增数(重复字母不自增,不同字母才自增),不是第一次出现的下标,因为题目有条件:使用数字的最大值等于转换规则的数目-1)
因此代码需要实现以下功能:
一、数组输入,需要有验证(验证输入的是否是小写,可嵌套循环判断)。
二、遍历数组,生成规则列表,可用数组char B[10]和int C[10]来记录规则,B数组是字母,C是该字母对应的顺序(顺序用变量自增)。比如数组char A[10]={a,b,a,d,e,f,d,g,j,k};循环每个元素,和数组B中对比,存在就跳过,不存在就将该字母记录到B中,并将顺序变量自增后记录到C数组对应的下标元素。
三、循环AB两个数组,通过对比,把数组A中元素替换成对应C中数字(或用新数组a来保存替换结果,原因见下)。
(注意:A是字符数组,c是整型数组,把数字直接存放到A,打印输出的时候按整型打印,实际就是把数字当成ASCII码保存了,打印数字就打印ASCII码。或者一开始就把A定义成字符串数组,最后把数字用ltoa()转换成字符串再存放到A中,打印用%s格式打印)。
如要接第二题整型a数组,这里可直接把对比结果保存在int a[10]数组中(和原数组A分开)。这样a可直接用于第二题。
第二题审题:根据上题的a内容定义n个数组(n=a中最大值-a中最小值+1),之后按照题目要求填充这几个数组,最后打印即可
⑵ C语言编程 判断字符串中“ab”字符串数,要求用函数实现
#include <stdio.h>
#include <string.h>
void delete1(char s[],char t[])
{
int i,j,k;
int flag=0;
//一:代码缺陷
//增加判断。应该
if(!s || !t)
{
return;
}
if(strlen(s) < strlen(t))
{
return;
}
for( i=j=0; s[i]!='\0';i++)
{
for( k=0; t[k]!='\0';k++)
{
if(s[i+k]==t[k]) flag=1;
else
{
flag=0;
break;
}
}
//二,逻辑错误
/*if(flag)
{
s[j++]=s[i+k];
i=i+k+1;
} */
//改成
if(flag)
{
strcpy(&s[i], &s[i + k]);
}
//if(!flag) s[j++]=s[i];
if(!flag) continue;
}
//s[j]='\0';
printf("%s\n",s);
}
main()
{
char str1[255],str2[255];
printf("please input the article:\n");
gets(str1);
printf("please input the words you want to delete:\n");
gets(str2);
delete1(str1,str2);
}