c++ - Porting code from array to vector -


i have developed simple crossword generator important point have used array grid. working on setting user can choose size grid want use. arrays can not want change code work vectors. having difficulty , tried few different things unable working:

//    std::vector<std::vector<char> > wordsearch; //    std::vector<std::vector<char *> > wordsearch; char wordsearch [10][11] = {0}; 

the third line array functions code. first line crashes program , second line runs fine complains "invalid conversion char char* append characters vector.

i tried

//    std::vector<std::vector<char> > wordsearch_vector(wordsearch, wordsearch +     sizeof(wordsearch) / sizeof(char)); 

but complains of char char* conversion too. in other attempts tried write functions convert array vector array must numerically defined in dimensions, no variables or left unspecified user later define such as: std::vector > array_convertto_vector(array a); (array undefined)

any suggestions? here code:

#include <iostream> #include <cstdlib> #include <time.h> #include <vector> #include <algorithm> #include <iomanip> #include <fstream> #include <sstream> #include <iterator> using namespace std;  int center_text(string string_word/*add second parameter if setw vary*/) {     int spaces = 10 - string_word.size();     return spaces / 2; }  int main() {      srand(time(null));     const char* const a_to_z = "abcdefghijklmnopqrstuvwxyz" ;      int random_char;  //    std::vector<std::vector<char> > wordsearch; //    std::vector<std::vector<char *> > wordsearch;     char wordsearch [10][11] = {0};      int random_choice;     int f_or_b;     int random_word_number;     int temp_i;     int temp_j;      string random_word;     bool flag;       string words_array[] = {"cat", "hello", "goodbye", "dog", "bat", "new", "say", "may", "day", "hay", "cello", "oranges", "link", "robin"};     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));     //vector<string> words_vector;     //vector<string> words_found_vector;  //    ifstream myfile("words.txt"); //    copy(istream_iterator<string>(myfile), istream_iterator<string>(), //         back_inserter(words_vector)); //make sure load vector once, not each time program loads!!!      (int = 0; < 10; i++) {         (int j = 0; j < 11; j++) {              random_choice = rand() % 5;             f_or_b = rand() % 2;             random_word_number = -1;             if (words_vector.size() != 0) {                 random_word_number = rand() % words_vector.size();                 random_word = words_vector[random_word_number];             }              if (j == 10) {                 wordsearch[i][j] = '\n';             }              else if (wordsearch[i][j] != '\0') { // prevents overwriting horizontal words, or add j in else if loop instead of temp_j                 continue;             }              else if (random_choice == 1 && random_word.size() < 11-j && words_vector.size() != 0) { //or <= 10-j                 flag = false;                 (int x = 0; x < random_word.size(); x++) {                     if (wordsearch[i][j+x] == random_word[x] || wordsearch[i][j+x] == '\0') {                         flag = true;                     }                     else {                         flag = false;                         break;                     }                 }                 temp_j = j;                 if (flag == true) {                     if (f_or_b == 1) { //reverse string                         reverse(random_word.begin(), random_word.end());                     }                     (int x = 0; x < random_word.size(); x++) {                         wordsearch[i][temp_j] = random_word[x];                         temp_j += 1;                     }                 if (f_or_b == 1) { //reverse                     reverse(random_word.begin(), random_word.end());                 }                 words_found_vector.insert(words_found_vector.begin(),words_vector[random_word_number]);                 words_vector.erase(words_vector.begin()+random_word_number);                 }                 else {                     int random_char = rand() % 26 + 0;                     wordsearch[i][j] = a_to_z[random_char];                 }             }              else if (random_choice == 2 && random_word.size() <= 10-i && words_vector.size() != 0) {                 flag = false;                 (int x = 0; x < random_word.size(); x++) {                     if (wordsearch[i+x][j] != '\0') {                         flag = false;                     }                 }                 (int x = 0; x < random_word.size(); x++) {                     if (wordsearch[i+x][j] == random_word[x] || wordsearch[i+x][j] == '\0') {                         flag = true;                     }                     else {                         flag = false;                         break;                     }                 }                 temp_i = i;                 if (flag == true) {                     if (f_or_b == 1) {                         reverse(random_word.begin(), random_word.end());                     }                     (int x = 0; x < random_word.size(); x++) {                         wordsearch[temp_i][j] = random_word[x];                         temp_i += 1;                 }                 if (f_or_b == 1) {                     reverse(random_word.begin(), random_word.end());                 }                 words_found_vector.insert(words_found_vector.begin(),words_vector[random_word_number]);                 words_vector.erase(words_vector.begin()+random_word_number);                 }                 else {                     int random_char = rand() % 26 + 0;                     wordsearch[i][j] = a_to_z[random_char];                 }             }              else if (random_choice == 3 && random_word.size() <= 10-i && random_word.size() < 11-j && words_vector.size() != 0) { //or <= 10-j                 flag = false;                 (int x = 0; x < random_word.size(); x++) {                     if (wordsearch[i+x][j+x] == random_word[x] || wordsearch[i+x][j+x] == '\0') {                         flag = true;                     }                     else {                         flag = false;                         break;                     }                 }                 temp_i = i;                 temp_j = j;                 if (flag == true) {                     if (f_or_b == 1) {                         reverse(random_word.begin(), random_word.end());                     }                     (int x = 0; x < random_word.size(); x++) {                         wordsearch[temp_i][temp_j] = random_word[x];                         temp_i += 1;                         temp_j += 1;                     }                     if (f_or_b == 1) {                         reverse(random_word.begin(), random_word.end());                     }                   words_found_vector.insert(words_found_vector.begin(),words_vector[random_word_number]);                   words_vector.erase(words_vector.begin()+random_word_number);                 }                 else {                     int random_char = rand() % 26 + 0;                     wordsearch[i][j] = a_to_z[random_char];                 }             }              else if (random_choice == 4 && random_word.size() <= 10-i && random_word.size() > 11-j && words_vector.size() != 0) { //or >= 10-j                 flag = false;                 (int x = 0; x < random_word.size(); x++) {                     if (wordsearch[i+x][j-x] == random_word[x] || wordsearch[i+x][j-x] == '\0') {                         flag = true;                     }                     else {                         flag = false;                         break;                     }                 }                 temp_i = i;                 temp_j = j;                 if (flag == true) {                     (int x = 0; x < random_word.size(); x++) {                         wordsearch[temp_i][temp_j] = random_word[x];                         temp_i += 1;                         temp_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 {                     int random_char = rand() % 26 + 0;                     wordsearch[i][j] = a_to_z[random_char];                 }             }              else {                     int random_char = rand() % 26 + 0;                     wordsearch[i][j] = a_to_z[random_char];             }         }     }      (int = 0; < 10; i++) {         (int j = 0; j < 11; j++) {                 cout<<wordsearch[i][j];         }     }   //    std::vector<std::vector<char> > wordsearch_vector; //    std::vector<std::vector<char> > wordsearch_vector(wordsearch, wordsearch + sizeof(wordsearch) / sizeof(char));      random_shuffle(words_found_vector.begin(), words_found_vector.end());     cout<<endl<<"your words are:"<<endl;     int counter = 0;     int space_value;     (int x = 0; x < words_found_vector.size(); x++) {         space_value = center_text(words_found_vector[x]);         if (counter == 2) {             (int y = 0; y < space_value; y++) {                 cout<<" ";             }             cout<<words_found_vector[x]<<endl;             counter = 0;         }         else {             (int y = 0; y < space_value; y++) {                 cout<<" ";             }             cout<<words_found_vector[x];             counter += 1;             (int y = 0; y < space_value; y++) {                 cout<<" ";             }         }     }  } 

you have uncomment vector portion , comment out array portion in 3 lines singled out make work if did not make code clear enough.

theres part loaded in file words had uncomment part out. if still not compile because of let me know , i'll repost working version of code. , thank help!

you need initialize wordsearch vector correct size. otherwise program attempts use memory not allocated , (usually) gets segment fault.

you can initialize vector size using second constructor on http://en.cppreference.com/w/cpp/container/vector/vector.

remember need initialize "inner" vectors well.

for particular use case, correct code is:

std::vector<std::vector<char> > wordsearch(10,std::vector<char>(11));

note initializing wordsearch vector 10 vectors of length 11.


Comments

Popular posts from this blog

c# - Send Image in Json : 400 Bad request -

jquery - Fancybox - apply a function to several elements -

An easy way to program an Android keyboard layout app -