http://ac.jobdu.com/problem.php?pid=1165
#include <iostream>
#include <string>
#include <stdio.h>
#include <ctype.h>
using namespace std;
string a[1005],A[1005]; //a保存输入的字符串,A保存转换为大写后的字符串
string tmp,pre,mid,post; //tmp是用来比较的字符串
//pre,mid,post分别对应方括号前中后,三个字符串
int main()
{ freopen("D:\\1.txt","r",stdin);
int n,i,j;
while (scanf("%d",&n)!=EOF)
{
for (i=0;i<n;i++)
{
cin>>a[i];
A[i]=a[i];
for (j=0;j<a[i].size();j++)
{
A[i][j]=toupper(A[i][j]); //只能本地转换,不能a[i][j]-->>A[i][j]
}
}
cin>>tmp;
for (j=0;j<tmp.size();j++)
{
tmp[j]=toupper(tmp[j]);
}
int p1=tmp.find('[');
if (p1==string::npos) //待比较字符串没有方括号
{
for (i=0;i<n;i++) //则比较n个字符串,相同就输出
{
if (A[i]==tmp)
{
cout<<i+1<<' '<<a[i]<<endl;
}
}
}
else
{
int p2=tmp.find(']');
pre=tmp.substr(0,p1); //从0开始,p1个字符剪下来
mid=tmp.substr(p1+1,p2-p1-1);
post=tmp.substr(p2+1); //从p2+1到整个tmp的末尾减下来
for (i=0;i<n;i++)
{
if ( pre==A[i].substr(0,p1)&&mid.find(A[i][p1])!=string::npos&&post==A[i].substr(p1+1))
{
cout<<i+1<<' '<<a[i]<<endl;
}
}
}
}
return 0;
}