#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
/*string strs[120005];
string ans[60005];*/
string* strs = new string[120005];
string* ans = new string[60005];
int n,d = 0, str_sum = 0;
cin >> n;
for (int i = 0;i<n; i++)
{
string str;
cin >> str;
strs[i] = str;
}//编写词典,录入所有的单词
str_sum = n+1;
for (int i = 0; i < str_sum; i++)
{//遍历所有字符串,以当前字符串为待检查的子串
int L = strs[i].length();//计算出当前字符串的长度,以便之后的substr计算用
for (int j = 0; j < str_sum; j++)
{//遍历,从词典中寻找每一个字符串,看看有没有字符串可以包含当前的子串
if (strs[i] == strs[j].substr(0, L) && strs[i] != strs[j])
{//找到了,strs[j]可以包含当前的子串
string temp = strs[j].substr(L);//我们求出这个可能是复合词的strs[j]的另一半
if (find(strs, strs + str_sum, temp) != strs + str_sum)
{//发现这另一半在词典中也能找到
ans[++d] = strs[j];
break;
}
}
}
}
sort(ans, ans + d);
for (int i = 0; i < d; i++) cout << ans[i] << ' ';
delete[] ans;
delete[] strs;
return 0;
}
主要学习了遇到警告C6262时的应对方法:
MSDN的官方解决方案:C6262 | Microsoft Learn