一次AC
1.需要注意文件结束符的判断
cin>>s,当遇到文件结束符时cin返回0
2.对于codeSet中的每个串,判断它是不是那些比它长的串的前缀子串即可。用substr函数返回前缀子串。
//Memory: 196K Time: 0MS
//Language: C++ Result: Accepted
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
unsigned setNum;
vector<string> codeSet;
string s;
bool flag;
int i,j;
setNum = 0;
while(1)
{
flag = false;
++setNum;
while(1)
{
if(cin>>s == 0)//读入文件结束符时,cin返回0,程序结束
return 0;
if(s.compare("9")==0)
break;
codeSet.push_back(s);
}
for(i=0; i<codeSet.size(); ++i)
{
for(j=i+1; j<codeSet.size(); ++j)
{
if(codeSet[i].size()<codeSet[j].size())
{
string sub=codeSet[j].substr(0,codeSet[i].size());
if(codeSet[i].compare(sub)==0)
{
flag = true;
break;
}
}
}
if(flag)
break;
}
if(flag)
cout<<"Set "<<setNum<<" is not immediately decodable"<<endl;
else
cout<<"Set "<<setNum<<" is immediately decodable"<<endl;
codeSet.clear();
}
return 0;
}