2013-08-10 2 views
0

나는 C + +를 배우기 위해 wordsearch 생성기를 개발 중이고 중복되지 않는 겹치는 단어를 방지하기 위해 붙어 있습니다 (예 : 상단에 문자 위로 쓰는 좌우 대칭 단어). 다운 워드. 여기서 코드이다 : I 완료 것을단어 검색 게임에서 겹쳐지는 문자 확인하기

else if (random_choice == 1 && random_word.size() <= 10-j && words_vector.size() != 0) { 
    flag = true; 
    for (int x = 0; x < random_word.size(); x++) { 
     if (wordsearch[i][j+x] != '0') { 
      flag = false; 
      break; 
     } 
    } 
    if (flag = true) { 
     for (int x = 0; x < random_word.size(); x++) { 
      wordsearch[i][j] = random_word[x]; 
      j += 1; 
     } 
     j -= 1; 
     words_found_vector.insert(words_found_vector.begin(),words_vector[random_word_number]); 
     //words_vector.erase(words_vector.begin()+random_word_number); 
    } 
    else { 
     wordsearch[i][j] = '1'; 
    } 
} 

는 2 개 차원 어레이를 생성 하였다 [10] [11] I가 반복 그래서 모든 공간 이외에는 0으로 채워진다 0 (제로) 문자로 가득 각 행의 11 번째 칸에 10X10 격자를 만드는 개행 문자가 있습니다. 내 else if 루프에서 첫 번째 부분은 이미 선택된 단어를 가지고 있으며 0이 있는지 확인하여 해당 단어가 적절한 공간에 맞는지 테스트합니다. 하향식 또는 대각선 단어에서 문자로 실행되는 경우와 같이 0이 아닌 문자로 실행되는 경우 내부 루프가 종료되고 부울 플래그가 설정되며 1이 아닌 임의의 문자가 입력됩니다. 전체 단어. 어쨌든 전체 단어가 삽입되고 위에서 아래로 한 글자를 덮어 쓰게됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

#include <iostream> 
#include <cstdlib> 
#include <time.h> 
#include <vector> 
#include <algorithm> 
using namespace std; 

int main() { 
    srand(time(NULL)); 
    const char* const a_to_z = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; 

    int random_char; 

    char wordsearch [10][11] = {0}; 

    bool flag; 

    string words_array[] = {"CAT", "HELLO", "GOODBYE", "DOG", "BAT", "NEW", "SAY", "MAY", "DAY", "HAY"}; 
    vector<string> words_vector (words_array, words_array + sizeof(words_array)/sizeof(string)); 

    string words_found_array[] = {}; 
    vector<string> words_found_vector (words_found_array, words_found_array + sizeof(words_found_array)/sizeof(string)); 

    for (int i = 0; i < 10; i++) { 
     for (int j = 0; j < 11; j++) { 
      int random_choice = rand() % 5; 
      int random_word_number = rand() % words_vector.size(); 
      string random_word = words_vector[random_word_number]; 

      if (j == 10) { 
       wordsearch[i][j] = '\n'; 
      } 
      else if (random_choice == 1 && random_word.size() <= 10-j && words_vector.size() != 0) { 
       flag = true; 
       for (int x = 0; x < random_word.size(); x++) { 
        if (wordsearch[i][j+x] != '0') { 
         flag = false; 
         break; 
        } 

       } 
       if (flag = true) { 
        for (int x = 0; x < random_word.size(); x++) { 
         wordsearch[i][j] = random_word[x]; 
         j += 1; 
        } 
        j -= 1; 
        words_found_vector.insert(words_found_vector.begin(),words_vector[random_word_number]); 
        //words_vector.erase(words_vector.begin()+random_word_number); 
       } 
       else { 
        wordsearch[i][j] = '1'; 
       } 
      } 
      else if (random_choice == 2 && random_word.size() <= 10-i && words_vector.size() != 0) { 
       int temp_i = i; 
       flag = true; 
       for (int x = 0; x < random_word.size(); x++) { 
        if (wordsearch[i+x][j] != '0') { 
         flag = false; 
         break; 
        } 
       } 
       if (flag = true) { 
        for (int x = 0; x < random_word.size(); x++) { 
         wordsearch[i][j] = random_word[x]; 
         i += 1; 
        } 
        i = temp_i; 
        words_found_vector.insert(words_found_vector.begin(),words_vector[random_word_number]); 
        //words_vector.erase(words_vector.begin()+random_word_number); 
       } 
       else { 
        wordsearch[i][j] = '1'; 
       } 
      } 
      else { 
       int random_char = rand() % 26 + 0; 
       wordsearch[i][j] = a_to_z[random_char]; 
      } 
     } 
    } 
    for (int i = 0; i < 10; i++) { 
     for (int j = 0; j < 11; j++) { 
       cout<<wordsearch[i][j]; 
     } 
    } 

    cout<<"Your words are:"<<endl; 
    for (int x = 0; x < words_found_vector.size(); x++) { 
     cout<<words_found_vector[x]<<endl; 
    } 
} 

한 가지 더 :

//words_vector.erase(words_vector.begin()+random_word_number); 

내 프로그램을 충돌 여기에 코드의 나머지 부분입니다. 나는이와 범위 지정 문제라고 생각합니다 :

int random_choice = rand() % 5; 
int random_word_number = rand() % words_vector.size(); 
string random_word = words_vector[random_word_number]; 

내가하고 싶은 것은 사용자가 나에게 그들이 검색 할 단어의 목록을 제공해야 결국이며,이 기능은 그 중 일부를 선택하고 그것을 제시 사용자가 게임을 할 때 올바르게 작동하지 않아 교차 단어 및 단어 - 찾기 목록에 중복 문자가 나타납니다.

도움 주셔서 감사합니다.

답변

0

당신은 당신의 코드에 두 번이 오류가 : 하지 조건이다

if (flag = true) 

,이 과제입니다. trueflag에 할당하면 if 블록이 항상 실행됩니다. 당신은 C에서 그것을 쓸 ==

if (flag == true) 

더 일반적인 방법을 사용하여 그것을 비교 조건을 만들 필요 ++ 캐치 단지

if (flag) 
+0

감사 할 것이다. 나는 그것을했고 ==를 위해 작동하도록 코드를 약간 수정해야했지만 여전히 겹치지 않는 단어가 겹치지 않도록 방지하지 못한다. 그래도이 섹션을 다시 작성하고 내가 무엇을 생각해 낼 수 있는지 알아 봅니다. 어쩌면 벡터 지우기 기능에 문제가 있는지 알 수 있습니까? 삽입 작동합니다. – user2671156

+0

@ user2671156 루프 때문에 벡터 지우기가 중단됩니다. 그것은 벡터에서 모든 것을 제거한 후,'int random_word_number = rand() % words_vector.size();'는 크기가 0이기 때문에 충돌하기 때문에 0으로 나누기가 발생합니다. – DUman

+0

벡터 문제가 있습니다. 루프로 인해 하나가 아닌 더 많은 단어를 제거한다는 것이 내 마음을 완전히 미끄러 뜨 렸습니다. 감사! 또한 겹쳐진 단어로 문제를 해결했습니다. {0}으로 2D 배열을 초기화했기 때문에 모든 장소는 0이 아닌 NULL 문자로 채워집니다. 그래서 if (wordsearch [i] [j + x]! = '0') {, wordsearch [i] [j + x]! = '\ 0') {, 여기서 '0'은 '\ 0'. flag == true와 함께 사용하면 이제는 정상적으로 작동합니다. 도와 주셔서 감사합니다. – user2671156