2013-12-15 2 views
0

Я хочу, чтобы это произошло, когда result[0] (случайно сгенерированная буква) находится в array1 (список слов), слово должно переместиться на array2.Использование. найти с массивами. C++

Но когда я показываю array2, я получаю исходные слова независимо от того, что result[0] есть. И когда я показываю found, я получаю повторяющуюся строку чисел (~ 4942576). Что я делаю не так?

#include <iostream> 
#include <fstream> 
#include <cstdlib> 
#include <ctime> 
#include <algorithm> 
#include <string> 
using namespace std; 

char response; 
int letter; 
int letter2; 
int n; 
char result[8]; 
size_t found= 0; 
string array1[70549]; 
string array2[70549] ; 
string array3[70549] ; 
string array4[70549] ; 
string array5[70549] ; 
string array6[70549] ; 
string array7[70549] ; 
string array8[70549] ; 
string array9[70549] ; 
string array10[70549] ; 

char test = 'a'; 
int j = 0; 
int k = 0; 

int main() 
{ 
pointer: 
for (int a =0; a<8; a++) 
{ 
    cout<< "Consonant (c) or vowel(v)?" << endl; 
    cin >> response; 
    { 
     if ('c' == response) 
     { 
      srand (time(0)); 
      letter = (rand() %21); 
      n ++; 

      switch (letter)      //selects random const 
      { 
      case 0: 
       cout << "b" << endl; 
       result[n] = 'b'; 
       break; 

      case 1: 
       cout << "c" << endl; 
       result[n] = 'c'; 
       break; 

      case 2: 
       cout << "d" << endl; 
       result[n] = 'd'; 
       break; 

      case 3: 
       cout << "f" << endl; 
       result[n] = 'f'; 
       break; 

      case 4: 
       cout << "g" << endl; 
       result[n] = 'g'; 
       break; 

      case 5: 
       cout << "h"<< endl; 
       result[n] = 'h'; 
       break; 

      case 6: 
       cout << "j" << endl; 
       result[n] = 'j'; 
       break; 

      case 7: 
       cout << "k" << endl; 
       result[n] = 'k'; 
       break; 

      case 8: 
       cout << "l" << endl; 
       result[n] = 'l'; 
       break; 

      case 9: 
       cout << "m" << endl; 
       result[n] = 'm'; 
       break; 

      case 10: 
       cout << "n" << endl; 
       result[n] = 'n'; 
       break; 

      case 11: 
       cout << "p" << endl; 
       result[n] = 'p'; 
       break; 

      case 12: 
       cout << "q" << endl; 
       result[n] = 'q'; 
       break; 

      case 13: 
       cout << "r" << endl; 
       result[n] = 'r'; 
       break; 

      case 14: 
       cout << "s"<< endl; 
       result[n] = 's'; 
       break; 

      case 15: 
       cout << "t" << endl; 
       result[n] = 't'; 
       break; 

      case 16: 
       cout << "v"<< endl; 
       result[n] = 'v'; 
       break; 

      case 17: 
       cout << "w"<< endl; 
       result[n] = 'w'; 
       break; 

      case 18: 
       cout << "x" <<endl; 
       result[n] = 'x'; 
       break; 

      case 19: 
       cout << "y"<< endl; 
       result[n] = 'y'; 
       break; 

      case 20: 
       cout << "z"<< endl; 
       result[n] = 'z'; 
       break; 
      } 
     } 

     else if ('v' == response) 
     { 
      srand (time(0)); 
      letter2 = (rand() %4); 
      n++; 

      switch (letter2)        //selects random vowel 
      { 
      case 0: 
       cout << "a"<< endl; 
       result[n] = 'a'; 
       break; 

      case 1: 
       cout << "e" <<endl; 
       result[n] = 'e'; 
       break; 

      case 2: 
       cout << "i"<< endl; 
       result[n] = 'i'; 
       break; 

      case 3: 
       cout << "o"<< endl; 
       result[n] = 'o'; 
       break; 

      case 4: 
       cout << "u" << endl; 
       result[n] = 'u'; 

      } 
     } 
     else if ( response != 'c' || 'v') 
     { 
      cout << "Invalid, please choose 'c' or 'v'"<< endl; 
      cin >> response; 
     } 
    } 


} 

cout<<endl<< "Your letters are"; 

for(int i=0; i<8; i++) 
{ 
    cout << result[i]; 
    cout << " "; 
} 
ifstream file("C:\\Users\\Chris\\Documents\\words.txt"); 
if(file.is_open()) 
{ 

    for(int i = 0; i < 70549; ++i) 
    { 
     file >> array1[i]; 
    } 
} 

for (int i =0; i < 70549; i ++) 
{ 
    std::size_t found = array1[i].find(result); 

    if (found!=std::string::npos) 
     cout << array1[i] << ' '; 

} 

cout << endl << endl<<"Your words are: "; 
for (int i =0; i <sizeof(array2[i]); i++) 
    cout << array2[i] << endl; 
return 0; 
} 
+5

Это очень много данных для хранения в стеке. Вы также никогда не храните ничего в 'result [0]'. – chris

+0

Вы 'находите' результат 'в каждой' 'строке' array1', но в вашем вопросе говорится, что вы пытаетесь найти 'result [0]' в каждом элементе 'array1'. Может быть, это ваша проблема? – Jashaszun

+0

@chris Если я что-то не хватает, эти массивы являются глобальными и не хранятся в стеке. – polkadotcadaver

ответ

0

Я вижу, что в вашем коде:

array1[i].find(result) 

Это пытается найти result в каждом слове. Здесь result объявлен как char[8], то есть строка. Поскольку ваш код никогда не хранит ничего в первом элементе массива result, он, вероятно, представляет собой пустую строку, которая может быть найдена в любой строке. Это не то, что вы хотите! Вероятно, вы захотите найти result[0].

Вы также писал в комментариях:

Нет, это была ошибка с моей стороны, мой код говорит результат [0]

Ваш код ясно говорит result, не result[0]. Попробуйте изменить result на result[0] (или, из-за того, как работает ваш другой код, result[1]); это устранит некоторые проблемы.

Кроме того, вы пытаетесь заполнить некоторые массивы здесь. Массивы не поддерживают это - вместо этого вы должны использовать векторы. Затем, вы можете использовать свой метод size вместо неправильного sizeof оператора:

std::vector<string> array2; 
... 
for (int i = 0; i < array2.size(); i++) 
    cout << array2[i] << endl; 
+0

Вы, сэр, гений! Спасибо, что сработало: D – user3105207

+0

О'кей новый вопрос, как я могу проверить, пустое ли значение массива, и если оно есть, пропустите это значение? – user3105207

0

Это не связано с вашей проблемой, но ради любви к богу, не делают эти ужасные заявления переключатель, что НАМНОГО дублированного и избыточного кода. Выполните эту же функцию:

char pickRandomVowel() { 
    char vowels[] = "aeiou"; 
    return vowels[rand() % sizeof(vowels)]; 
} 

char pickRandomConsonant() { 
    char consonants[] = "bcdfghjklmnpqrstvw"; 
    return consonants[rand() % sizeof(consonants)]; 
} 

int main() 
{ 
    srand (time(0)); 

    for (int n = 0; n < 8; n++) 
    { 
     char response; 
     cout<< "Consonant (c) or vowel(v)?" << endl; 
     cin >> response; 

     // keep retrying 
     while (response != 'c' && response != 'v') 
     { 
      cout << "Invalid, please choose 'c' or 'v'" << endl; 
      cin >> response; 
     } 

     char letter; 
     if ('c' == response) 
     { 
      letter = pickRandomConsonant(); 
     }  
     else if ('v' == response) 
     { 
      letter = pickRandomConsonant(); 
     } 

     cout << letter; 
     result[n] = letter; 
    } 

    // etc... 
} 
Смежные вопросы