描述
给定任意一个较短的子串,和另一个较长的字符串,判断短的字符串是否能够由长字符串中的字符组合出来,且长串中的每个字符只能用一次。
输入
一行数据包括一个较短的字符串和一个较长的字符串,用一个空格分隔,如: ab aab bb abc aa cccc uak areuok
输出
如果短的字符串可以由长字符串中的字符组合出来,返回字符串 “true”,否则返回字符串 “false”,注意返回字符串类型而不是布尔型。
输入样例
a b
aa ab
aa aab
uak areuok
输出样例
false
false
true
true
代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
#include <ctype.h>
int main()
{
int i=0,j=0,m,n;
int e=0,f=0;
char a,b,c[100],d[100];
while((a=getchar())!=' ')
{
c[i]=a;
i++;
}
while((b=getchar())!='\n')
{
d[j]=b;
j++;
}
for(m=0;m<i;m++)
{
e=0;
for(n=0;n<j;n++)
{
if(c[m]==d[n])
{
d[n]=' ';
e=1;
}
if(e==1)
break; //若有相同字符,则退出此层循环,寻找c中下个字符
else if(n==j-1)
f=1; //表示c[m]在d中找不到,跳出所有循环,输出false
}
if(f==1)
{
printf("false"); //只要有一个字母找不到就输出false
break;
}
}
if(f==0)
printf("true");
return 0;
}
心得
- c语言中单引号表示单个字符,双引号表示字符串
- 不知道怎么回事 在自己电脑上编译运行都没有问题,贴到小米oj上就运行出错。。。。。。