Правильное использование метода .find () в c ++ - PullRequest
0 голосов
/ 27 сентября 2019

Я разбираю файл .xml по образовательным соображениям.Я знаю, что правильный и безопасный способ - использовать стороннюю библиотеку, но я хочу расширить свои знания в C ++, используя ее библиотеки и методы.

Я прочитал файл и загрузил его содержимое в строку,Я удалил пробелы, и теперь я пытаюсь зафиксировать значение между тегом low.Я использую метод .find (), чтобы сопоставить тег, а затем пытаюсь сохранить его в новой строке.Моя проблема в том, что мой код удаляет все перед первым совпадением, а также то, что начинается и заканчивается тегом, который я предоставляю.Есть ли способ, может быть, добавить в новую строку или вектор значение между тегом, используя мой подход?

Редактировать: я отредактировал код, включив в него все, что я написал.

Вот код, который я использую:

 int main(){
    std::ifstream inFile("demo.xml");
    std::string contents;


    bool found_tag = false;

    std::cout << "line 17" << std::endl;
    while (getline(inFile, contents))
    {
        std::string temp;
        std::string low;
        for (int i = 0; i < contents.length(); ++i)
        {
            if (contents[i] == ' ' && temp.size() == 0) {}
            else
            {
                temp += contents[i];
            }
        }


        unsigned int begin_tag = temp.find("<low>"); //when printed shows a random number or 0
        unsigned int end_tag = temp.find("</low>"); // same as the above.
        if (begin_tag != std::string::npos)
        {
            found_tag = true;
            continue;
        }
        else if (end_tag != std::string::npos)
        {
            found_tag = false;
        }

        if (found_tag)
        {
            low += temp;
            std::cout << low << std::endl;
        }
      return 0;
    }

Вывод:

    <high>200</high>
    </interval>
    <interval>
    <high>400</high>
    </interval>
    <interval>
    <high>700</high>
    </interval>
    <interval>
    <high>800</high>
    </interval>
    </intervals>
    </root>     

1 Ответ

3 голосов
/ 27 сентября 2019

Когда вы делаете low += temp;, вы добавляете весь ввод.

Возможно, вам нужен текст от begin_tag до end_tag (возможно, не первые 5 символов, которые всегда будут "<low>")

Попробуйте low += temp.substr(begin_tag + 5, end_tag - begin_tag - 5);

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