一.题目描述
写一个函数返回bool值,来判断给定的字符串A和B(假设都是小写字母),是否是B中的字符都存在于A中,如果是返回true,否则返回false。例如:
字符串A:abcde
字符串B:abc
那么返回true
二.思路分析
定义一个长度为26的一维数组,分别代表abcde...z作为标记。
说明:如果数组的元素是1,那么这个字母出现,如果是0,那么未出现
遍历字符串str,因为字符串的每个元素都是字母,我们可以得到下列公式:
str[i]-'a'==对应数组下标
什么意思呢?比如定义一个字符串char str[i]=abc ; str[0]-'a'-->'a'-'a'==0,而这个0正好是a对应数组的下标。同样str[1]-'a'==1,正好也是b代表的数组下标。
这个等式非常重要,在处理字母类的问题可以达到很好的效果。
接着,我们遍历字符串A,然后把A的字母记录到数组中,出现的就赋值成1。再遍历字符串B,查看它的字符是否都有出现在A中,如果有一个字母没出现,返回false,否则返回true。
举个例子:
字符串A:abcd
字符串B:abc ,应该返回true.
三.完整代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
bool checkString(const char* str1, const char* str2)
{
int arr[26] = { 0 };
for (int i = 0; str1[i] != '\0'; i++)
{
arr[str1[i] - 'a'] = 1;
}
for (int j = 0; str2[j] != '\0'; j++)
{
if (arr[str2[j] - 'a'] == 0)
return false;
}
return true;
}
int main()
{
char str1[] = "ABCD";
char str2[] = "ABC";
if (checkString(str1, str2))
printf("%s的字符都出现在%s中\n", str2, str1);
return 0;
}
四.运行结果
创作不易, 如果这份博客👍对你有帮助,可以给博主一个免费的点赞以示鼓励。
欢迎各位帅哥美女点赞👍评论⭐收藏⭐,谢谢!!!
如果有什么疑问或不同的见解,欢迎在评论区留言哦👀。
祝各位生活愉快⭐