题目
code
#include<stdio.h>
#include<string.h>
#include <math.h>
#include <stdlib.h>
int main()
{
char s1[10],s2[100];
int l1,l2,count;
while(gets(s1)&&s1[0]!='#'){
gets(s2);
l1=int(strlen(s1));
l2=int(strlen(s2));
for(int i=0;i<l1;i++)
{
count=0;
for(int j=0;j<l2;j++)
{
if(s1[i]==s2[j])
count++;
}
printf("%c %d\n",s1[i],count);
}
}
return 0;
}
之前错误的code
#include<stdio.h>
#include<string.h>
#include <math.h>
#include <stdlib.h>
int main()
{
char s1[10],s2[80];
int l1,l2,count;
while(scanf("%s",s1)&&s1[0]!='#'){
scanf("%s",s2);⚠️
l1=int(strlen(s1));
l2=int(strlen(s2));
for(int i=0;i<l1;i++)
{
count=0;
for(int j=0;j<l2;j++)
{
if(s1[i]==s2[j])
count++;
}
printf("%c %d\n",s1[i],count);
}
}
return 0;
}
- scanf 与 gets
scanf() 会忽略行开头的所有空格,并以空格、换行符结束输入;
使用getchar()读取scanf语句执行后,缓冲区留下的换行符,
gets读入以任何字符开始的字符串,以换行符结束,但之后会丢弃换行符并以’\0’代替;
第一:要注意不同的函数是否接受空格符、是否舍弃最后的回车符的问题!
读取字符时:
scanf()以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中);
getchar()以Enter结束输入,也不会舍弃最后的回车符;
读取字符串时:
scanf()以Space、Enter、Tab结束一次输入
gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符!
- 还有\0 占空间,不能【80】至少也要81
定义数组时,数组大小最好比告诉的最大范围大一点。字符数组大小必须比字符串最大长度大1。>定义数组时,数组大小最好比告诉的最大范围大一点。字符数组大小必须比字符串最大长度大1。