вставка на вектор с ++ - PullRequest
       12

вставка на вектор с ++

1 голос
/ 03 февраля 2012

В приведенном ниже коде много выходных строк, в конце я пытаюсь вставить обратно в avector и добавить его в строку, чтобы потом я мог ее вернуть, но он получает только последнюю строку, которая мне нужна, чтобы получитьвсе они.

Что я делаю неправильно, чтобы я мог отбросить все строки

DCS_LOG_DEBUG("--------------- Validating .X/ ---------------")
std::string str = el[i].substr(3);
std::vector<std::string>st;
split(st,str,boost::is_any_of("/"));
boost::regex const string_matcher(splitMask[0]);
if(boost::regex_match(st[0],string_matcher))
{
    a = "Correct Security Instruction\n";
}
else
{
    a = "Incorrect Security Instruction\n"
}


boost::regex const string_matcher4(splitMask[4]);
if(boost::regex_match(st[4],string_matcher4))
{
    a = "Correct Autograpgh\n"
}
else
{
    a = "Incorrect Autograpgh\n"
}

boost::regex const string_matcher5(splitMask[5]);
if(boost::regex_match(st[5],string_matcher5))
{
    a = "Correct Free text\n";

}
else
{
    a = "Incorrect Free text\n"
}

std::vector<std::string>::iterator it;
std::string s = ("");
output.push_back(a);
i++;

for(it = output.begin(); it < output.end(); it++)
{
    s+= *it;
}

return s;

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

Назначение более чем один раз a будет заменять , а не объединять.То, что вы ищете, скорее всего выходной поток (или выходной итератор).

Предлагаем упростить:

DCS_LOG_DEBUG("--------------- Validating .X/ ---------------")
std::string str = el[i].substr(3);
std::vector<std::string> st;
split(st,str,boost::is_any_of("/"));
boost::regex const string_matcher(splitMask[0]);
boost::regex const string_matcher4(splitMask[4]);
boost::regex const string_matcher5(splitMask[5]);

std::ostringstream oss;

oss << (boost::regex_match(st[0],string_matcher )? "correct":"incorrect") << " Security Instruction\n";
oss << (boost::regex_match(st[4],string_matcher4)? "correct":"incorrect") << " Autograpgh\n";
oss << (boost::regex_match(st[5],string_matcher5)? "correct":"incorrect") << " Free text\n";

return oss.str();

Включить <sstream> для std::ostringstream

0 голосов
/ 03 февраля 2012

Вы уверены, что полученный результат - не просто первая строка?

Тем не менее, не совсем понятно, что вы пытаетесь сделать, но если предположить, что есть какой-то зацикленный код над тем, что вы опубликовали, кажется, что ваша проблема с позиционированием цикла for.

         while( i < el.size() )  //Assuming something like this
         {                  
              ...

              else
              {
                  a = "Incorrect Free text\n"
              }               
              output.push_back(a);
              i++;
          }
          //move this stuff out of the loop so that it only runs after you have 
          // processed all the strings in el
          std::vector<std::string>::iterator it;
          std::string s = ("");
          for(it = output.begin(); it < output.end(); it++)
          {
             s+= *it;
          }
          return s;
       }
...