2016-11-12 4 views
-1

Итак, я придумал следующий код, чтобы открыть текстовый файл и сохранить его, и использовать массив для распечатки всего текста. Мой вопрос в том, как я могу получить доступ к определенному слову или тексту в файле. Если я не ошибаюсь, в этом должен быть цикл for, но я не совсем уверен, как это сделать.C++ сохранение текстового файла в массиве

int main() { 
    ifstream dictionaryFile; 
    dictionaryFile.open("dictionary.txt"); 
    char output[100]; 
    //char wordsFromDictionary[40437][22]; 

    int i=0; 
    if(dictionaryFile.is_open()){ 
     while(!dictionaryFile.eof()){ 
      dictionaryFile >> output; 
      cout<<output<<endl; 
     } 

    } 
    return 0; 
} 
+0

Зачем нужен цикл 'for'? –

+0

прямо сейчас код просто отображает все из текстового файла. Так не должен ли я использовать цикл for для выбора n-го элемента? –

+0

Цикл 'for' не более эффективен, чем цикл while. Вы можете использовать 'strcmp' с инструкцией' if'. –

ответ

0

Как у вас есть массив символов

char output[100]; 

нет никакого различия между словами в этой структуре данных. Файл был просто прочитан символом по символу и сохранен в массиве.

Простая реализация разделения на слова (с помощью петель, как вы просили, с минимальными изменениями в коде), предполагая, что слова отделены друг от друга разделителем будет

char wordsFromDictionary[40437][22]; 
char delimiter=... 
int i=0; 
int j=0 
char c; 
if(dictionaryFile.is_open()){ 
    while(!dictionaryFile.eof()){ 
     c=dictionaryFile.get(); 
     if(c==delimiter){ 
      i++; 
      j=0; 
     } 
     else if(j<22) { 
      wordsFromDictionary[i][j]=c; 
      j++; 
     } 
    } 
} 

Обратите внимание, что это просто режет, укорачивает слова длиной более 22 символов.

0

Если вы хотите прочитать в некоторых строках, очевидным выбором было бы использовать std::string s для выполнения задания. Если вы хотите массив из них, хранить их в std::vector:

ifstream d("dictionary.txt"); 

std::vector<std::string> words{std::istream_iterator<std::string>(d), {}}; 

Это читает все слова в векторе. Если они уже отсортированы, вы можете (например) использовать std::binary_search, чтобы найти, находится ли слово в векторе или нет.

Смежные вопросы