@danij_com

Где я ошибся в коде?

Код должен находить в файле текст, который находится между <keyMaterial></keyMaterial>и собственно выводить его в консоли.
Но где-то что-то не так, ибо в C++ я далеко не местный.
Укажите на ошибку.
Код:
// ConsoleApplication9.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <vector>
#include <fstream>
#include <string>


using namespace std;

int main() {
	std::vector< std::string > src;
	std::fstream file("{1AC815AC-7555-48FB-B768-9E171453FE23}.xml");

	std::string temp;
	while (!file.eof()) {
		std::getline(file, temp);
		src.push_back(temp);
		std::cout << temp << std::endl;

	}
	

	size_t begin = src.find("<keyMaterial>") + 13;
	size_t end = src.find("</keyMaterial>");
	src = src.substr(begin, end - begin);

	//Вывод
	for (int i = 0; i < 10; i++) {
		std::cout << src[i] << std::endl;
	}

	_getch();
	return 0;
}

А ошибки такие:
5d1f3ea171a5431783dab004f36b60ac.png
  • Вопрос задан
  • 273 просмотра
Пригласить эксперта
Ответы на вопрос 1
@BLVCKP
Возраст ничего не говорит о наличии знаний.
Насчёт ошибки - std::vector<T> не имеет у себя функции поиска (find).
Так же ещё одна ошибка - невозможно преобразовать тип std::vector<std::string>> в std::string, как это и было сделано тут - src = src.substr(begin, end - begin);.

Предлагаю свой способ используя итераторы.
И на будущее - лучше не вставлять значения просто так в код, а и использовать #define / enum..

Чтобы напечатать саму строку, достаточно просто написать std::cout << str;.
Насчёт паузы перед выходом программы - в С++ лучше забыть про conio.h, всё уже есть в библиотеке iostream. Достаточно просто написать - std::getchar(); , а так же, если пишете программу для ОС Windows, то можно использовать std::system("pause");.

#define BEG_TAG_LEN 13
#define END_TAG_LEN 14

std::string str = "";
bool found = false;
size_t beg = 0;

for (std::vector<std::string>::iterator it = src.begin(); it != src.end() && !found; ++it)
{
	if ((beg = it->find("<keyMaterial>")) != std::string::npos)
	{
		found = !found;
		beg += BEG_TAG_LEN;
		str = it->substr(beg, (it->length() - beg - END_TAG_LEN));
	}
}

std::cout << str << std::endl << std::endl;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы