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; 
}