2 D文字配列のワードパズル
11438 ワード
#include
#include
using namespace std;
void comparestring(string sExist,string str)
{
ifstream input("file1.txt");
if(input){
while(getline(input,sExist))
if(sExist==str)
cout << str << endl;
input.close();
}else
cerr << "couldn't open file!";
}
int main()
{
char array[4][4]={{'t','h','i','s'},
{'w','a','t','s'},
{'o','a','h','g'},
{'f','g','d','t'}};
char buffer[5];
string str;
string sExist;
//search one-char words
for(int i=0;i!=4;++i)
for(int j=0;j!=4;++j)
{
buffer[0]=array[i][j];
buffer[1]='\0';
str=buffer;
comparestring(sExist,str);
}
//search two-char words
for(int i=0;i!=4;++i)
for(int j=0;j!=4;++j)
for(int m=-1;m!=2;++m)
for(int n=-1;n!=2;++n)
{
buffer[0]=array[i][j];
if((i+m)<0||(i+m)>3||(j+n)<0||(j+n)>3)
continue;
buffer[1]=array[i+m][j+n];
buffer[2]='\0';
str=buffer;
comparestring(sExist,str);
}
//search three-char words
for(int i=0;i!=4;++i)
for(int j=0;j!=4;++j)
for(int m=-1;m!=2;++m)
for(int n=-1;n!=2;++n)
{
buffer[0]=array[i][j];
if((i+2*m)<0||(i+2*m)>3||(j+2*n)<0||(j+2*n)>3)
continue;
buffer[1]=array[i+m][j+n];
buffer[2]=array[i+2*m][j+2*n];
buffer[3]='\0';
str=buffer;
comparestring(sExist,str);
}
//search four-char words
for(int i=0;i!=4;++i)
for(int j=0;j!=4;++j)
for(int m=-1;m!=2;++m)
for(int n=-1;n!=2;++n)
{
buffer[0]=array[i][j];
if((i+3*m)<0||(i+3*m)>3||(j+3*n)<0||(j+3*n)>3)
continue;
buffer[1]=array[i+m][j+n];
buffer[2]=array[i+2*m][j+2*n];
buffer[3]=array[i+3*m][j+3*n];
buffer[4]='\0';
str=buffer;
comparestring(sExist,str);
}
return 0;
}