作者在 2018-12-29 16:05:37 发布以下内容
/*问题描述
给出两个字符串s1和s2。
s1由若干连续小写字母组成,且每个小写字母只出现一次,例如”albwx”。
s2由若干个由单个空格分隔的字母构成,例如”a b c d a l”。
写一个程序找出字符串s2中属于字符串s1的字符,并按字母升序输出。
如果一个字母出现多次,只输出一次。如果s2中的字符都不属于s1则输出“No”。
输入说明
输入的第一行是字符串s1, 它至少包含一个字符, 且长度不超过 26。
第二行是字符串s2,字符串里只包含小写字母和空格,且长度不超过 256。
输出说明
按照字母升序输出字符串s2中属于字符串s1的字符,如果一个字符出现多次,只输出一次。
如果s2中的字符都不属于s1则输出“No”。
输入样例
albwx
a l b c d a
输出样例
a b l*/
#include
#include
int main()
{
char s1[26], s2[256], s3[26];//定义与初始化
int x, y, m, n, temp;
int z = 0;
gets(s1);
gets(s2);
x = strlen(s1);
y = strlen(s2);
for (m = 0; m < 26; m++)//比较并找出s2中与s1中相同的字母
{
for (n = 0; n < 256; n++)
{
if (s2[n] == s1[m])
{
s3[z] = s1[m];//保证字符串3中的元素是没有重复的
z++;
}
}
}
if (z == 0)
printf("No");
else
{
for (int i = 0; i < strlen(s3); i++)//冒泡排序
{
for (int j = 0; j < strlen(s3) - 1 - i; j++)
{
if (s3[j] > s3[j + 1])
{
temp = s3[j];
s3[j] = s3[j + 1];
s3[j + 1] = temp;
}
}
}
}
for (m = 0; m < z; m++)
{
printf("%c ", s3[m]);
}
return 0;
}