C ++ Читать каждую вторую строку из текстового файла и безопасно в векторе - PullRequest
0 голосов
/ 24 января 2020

Я делаю небольшой проект "переводчик". У меня есть этот текстовый файл, который выглядит следующим образом:

friend
amigo
mother
madre
telephone
teléfono

Как вы можете видеть, первая строка - это слово Engli sh, а следующее слово - слово для перевода. Я хочу сохранить каждое слово Engli sh в векторе и каждое слово Spani sh в другом векторе. Моя проблема в том, что я не знаю точно, как пропустить эти строки.

Ответы [ 3 ]

5 голосов
/ 24 января 2020

Вектор не ваш лучший выбор. Используйте std::map, что действительно хорошо для словаря, потому что элементы в нем упорядочены и уникальны, что является действительно хорошим выбором, вместо использования двух векторов, отделяющих слова от их определений:

#include <map>
#include <iostream>
#include <string>

int main()
{

    std::map<std::string, std::string> content;
    std::ifstream in("Data.txt");
    std::string word, definition;

    while (std::getline(in, word) && std::getline(in, definition))
        content[word] = definition;

    for (const auto& p : content)
        std::cout << p.first << " : "
        << p.second << std::endl;
     std::cout << std::endl;

    // To search for a word in dictionary:
    std::string search = "mother";
    auto ret = content.find(search);
    if (ret != content.cend())
        std::cout << search << " : \n" <<
        ret->second << std::endl;
    else
        std::cout << search << " : was not found in dictionary!" << std::endl;


    std::cout << "\n";
}
0 голосов
/ 24 января 2020

Моя проблема в том, что я не знаю точно, как пропустить эти строки.

Вот идея: предполагая, что у вас всегда есть Engli sh и Spani sh слово (или строка), встречающееся альтернативно в файле, вы можете оставить логическую переменную is_english для обозначения языка текущего слова (или строки). Первоначально он установлен на true, предполагая, что первое слово (или строка) находится на английском языке sh, а затем на false, true, false и т. Д. c. В качестве альтернативы, каждый раз, когда вы читаете новое слово (или строку). На каждой итерации, если is_english равно true, вы добавляете текущее слово (или строку) к вектору English. В противном случае добавьте Spanish вектор. Код приведен ниже для справки.

Предполагается, что у вас есть такой файл:

friend
amigo
mother
madre
telephone
teléfono
#include <iostream>
#include <fstream>
#include <vector>

int main(){
    std::ifstream in("./input.txt");
    if(!in){
        std::cout<<"Error opening the file! Maybe the file does not exist!";
        return 0;
    }
    std::string one_line;
    std::vector<std::string> english, spanish;
    bool is_english = true; // Variable to denote current word (starts with english)
    while(in.eof()==0){ // Read until end of file
        getline(in,one_line);
        if(is_english) // If english
            english.push_back(one_line);
        else // Otherwise, spanish
            spanish.push_back(one_line);
        is_english = !is_english; // Flip boolean variable value
    }
    std::cout<<"English words:\n";
    for(const auto i:english)
        std::cout<<i<<std::endl;
    std::cout<<"\nSpanish words:\n";
    for(const auto i:spanish)
        std::cout<<i<<std::endl;
    return 0;
}

Выход

English words:
friend
mother
telephone

Spanish words:
amigo
madre
teléfono
0 голосов
/ 24 января 2020

Я не знаю, каковы ваши намерения или что вы пытались. Но я надеюсь, что это поможет.

#include <iostream>
#include <vector>
#include <string>
using namespace std; 

int main(){
    string array[10] = {"friend", "amigo", "mother", "madre", "telephone", "teléfono"};
    vector<string> englishWords;
    vector<string> spanishWords;

    for(int i = 0; i < 10; i+=2){
        englishWords.push_back(array[i]);
    }

    for(int i = 1; i < 10; i+=2){
        spanishWords.push_back(array[i]);
    }

    for(int i = 0; i < englishWords.size(); i++){
        cout << englishWords[i] << endl;
    }

    for(int i = 0; i < spanishWords.size(); i++){
        cout << spanishWords[i] << endl;
    }

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...