第一次编译,4和5报错。将 int count 改成long long int,通过4,但是5依然报错。求教大佬。
#include<iostream>
#include<list>
#include<string>
using namespace std;
class Word
{
private:
char ch;//变换的左部
list<char> nextChar;//可以变换的字符
public:
Word(char ch):ch(ch)
{
nextChar.push_back(ch);//首先可以变换成自己
}
char getChar(){return ch;}
//获取可变换的种类数目
int getNextCount(){return nextChar.size();}
//更新可变换字符的列表。tran[k][0]和tran[k][1]记录转换规则
void setList(const char tran[][2],const int n)
{
auto it=nextChar.begin();
for(;it!=nextChar.end();it++)
{
for(int i=0;i<n;i++)
{
if(tran[i][0]==(*it))
{
bool found=false;
for(auto iitt=nextChar.begin();iitt!=nextChar.end();iitt++)
{
if(*iitt==tran[i][1])found=true;
}
if(!found)nextChar.push_back(tran[i][1]);
}
}
}
}
//show函数用于展示可变换字符的列表,以查看正确与否
// void show()
// {
// for(auto it=nextChar.begin();it!=nextChar.end();it++)
// cout<<*it<<" ";
// cout<<endl;
// }
};
int main()
{
const char* ch;//ch 输入的字符
int len;//len 输入的长度
string str;
cin>>str;
len=str.size();
ch=str.c_str();
int k;cin>>k;//k 转换规则的数目
char tran[k][2];//tran[k][0]和tran[k][1]记录转换规则
for(int i=0;i<k;i++)cin>>tran[i][0]>>tran[i][1];
list<Word> wordList;
for(int i=0;i<k;i++)
{
bool existed=false;
for(auto it=wordList.begin();it!=wordList.end();it++)
{
if((*it).getChar()==tran[i][0])existed=true;
}
if(!existed){
wordList.push_back(Word(tran[i][0]));
wordList.back().setList(tran,k);
}
}
// for(auto it=wordList.begin();it!=wordList.end();it++)
// {
// (*it).show();
// }
long long int count=1;
for(int i=0;i<len;i++)
{
auto it=wordList.begin();
for(;it!=wordList.end();it++)
{
if(ch[i]==(*it).getChar()) break;
}
if(it!=wordList.end())count*=(*it).getNextCount();
}
cout<<count<<endl;
return 0;
}