Мне надо из файла, все что находится между тегами <Title type="string"> и </Title>, ну допустим вывести на экран. Поидейно, конструкция должна работать, он находит iPosBegin, корректно, так же находит iPosEnd, тоже корректно, т.е. если из первого вычесть второе — это нам и надо, ну, не суть, Вся проблема в том, что я немного не понимаю, почему когда дело доходит до
tString.assign(sTemplate,iPosBegin+21,iPosEnd);
Он начало вырезает правильно в перменную tString, но на этом не оставнавливается а загоняет туда все что остается?
Помогите, плиз!
Вот код, творчески порезанный:
#include <string>
#include <iostream>
#include <fstream>
#include <stdexcept>
int main(int argc, char* argv[])
{
using std::string;
std::ifstream ifs;
ifs.open("31621.xml", std::ios::in);
if (!ifs) { throw std::logic_error("Cannot open template."); }
unsigned int iPosBegin, iPosEnd;
char szBuffer[65537];
string sTemplate;
while (!ifs.eof())
{
ifs.getline(szBuffer, 65536);
sTemplate += szBuffer;
sTemplate += '\n';
}
string tString;
sTemplate.begin();
iPosBegin = sTemplate.find("<Title type=\"string\">");
if (iPosBegin != string::npos)
{
iPosEnd = sTemplate.find("</Title>");
if (iPosEnd != string::npos)
{
tString.assign(sTemplate,iPosBegin+21,iPosEnd);
std::cout << tString << std::endl;
}
else
{
std::cout << "Broken news! " << iPosBegin << " " << iPosEnd << std::endl;
return -1;
}
}
return 0;
}