Написал код для разбора файла формата:
{номер}{строка}
Пример
{100}{Hello!}
Код на С++
#ifndef _MSG_HPP
#define _MSG_HPP
/*******************************************************************************
*******************************************************************************/
class msg
{
public:
msg(const string & name);
~msg();
char read_char();
bool read();
const string & get();
const string & str(const string & val);
private:
size_t m_line;
size_t m_tabs;
string m_buffer;
ifstream m_input;
map<string, string> m_data;
};
/*******************************************************************************
*******************************************************************************/
msg::msg(const string & name)
{
m_input.open(name.c_str());
m_line = 1;
m_tabs = 0;
while(read())
{
string f = get();
read();
string s = get();
m_data.insert(pair<string, string>(f,s));
}
for (map<string,string>::iterator i = m_data.begin(); i != m_data.end(); ++i)
{
cout << i->first + " = " + i->second << endl;
}
}
/*******************************************************************************
*******************************************************************************/
msg::~msg()
{
m_input.close();
}
/*******************************************************************************
*******************************************************************************/
char msg::read_char()
{
char ch = m_input.get();
m_tabs++;
if (ch == '\n')
{
m_line++;
m_tabs = 0;
}
return ch;
}
/*******************************************************************************
*******************************************************************************/
bool msg::read()
{
m_buffer.clear();
char ch = read_char();
while ((ch == ' ') || (ch == '\n'))
{
ch = read_char();
}
if (ch == '{')
{
ch = read_char();
while (ch != '}')
{
if (ch != '\n')
{
m_buffer.push_back(ch);
}
ch = read_char();
}
}
if (ch == EOF)
{
return false;
}
return true;
}
/*******************************************************************************
*******************************************************************************/
const string & msg::get()
{
return m_buffer;
}
/*******************************************************************************
*******************************************************************************/
const string & msg::str(const string & val)
{
map<string, string>::iterator i = m_data.find(val);
if (i == m_data.end())
{
return "Error: Not found string in " + val;
}
else
{
return i->second;
}
}
/*******************************************************************************
*******************************************************************************/
#endif
Проблема в этой функции
const string & msg::str(const string & val)
{
map<string, string>::iterator i = m_data.find(val);
if (i == m_data.end())
{
return "Error: Not found string in " + val;
}
else
{
return i->second;
}
}
Как вернуть second?