/*本文系「人工智能安全」(微信公众号)原创,转载请联系本文作者(同博客作者)。欢迎你转发分享至朋友圈,并给予「关注、星标、点赞」三连支持。互相欣赏,互相批判。我是一名有诗人气质的网络安全工程师期待与你的思想交流碰撞出智慧的花火水木清华 2002-03-23 字符串匹配 */ #include <iostream> using namespace std; //字符串匹配的函数接口 //判断短字符串中的所有字符是否在长字符串中全部出现,区别于短字符串是否为长字符串的子字符串。 int String_Matching(string str1, string str2) { int short_str[128] = {0}; //记录短字符串中各种字符的出现情况 int long_str[128] = {0}; //记录短字符串中各种字符的出现情况 int count = 0; //短字符串和长字符串具有相同字符的个数 int sum = 0; //短字符串具有不同字符的总数 //字符记录:若某字符出现在(短、长)字符串中,则置该字符的 ASCII 码作为下标对应的数组元素为 1 for (int i = 0; i < str1.size(); i++) { short_str[str1[i]] = 1; } for (int i = 0; i < str2.size(); i++) { long_str[str2[i]] = 1; } //计数:第一个 if 语句:得到短字符串和长字符串具有相同字符的个数,第二个 if 语句:得到短字符串具有不同字符的总数 for (int i = 0; i < 128; i++) { if ((short_str[i] == 1) && (long_str[i] == 1)) { count++; } sum += short_str[i]; } //若短字符串和长字符串具有相同字符的个数 和 短字符串具有不同字符的总数 相等,则满足要求 if (count == sum) { cout << "true" << endl; } else if (count != sum) { cout << "false" << endl; } return 0; } //主函数 int main() { string ShortString, LongString; while (cin >> ShortString >> LongString) { String_Matching(ShortString, LongString); } return 0; }

京公网安备 11010502036488号