CPP int в строку в вопросе оператора - PullRequest
1 голос
/ 19 сентября 2011

Я должен написать что-то вроде

q.push_back(q1); ... to ... q.push_back(q100);

Я пишу это как

for (int i = 1; i <= 100; i++) {
    try {
        std::string s = boost::lexical_cast<std::string > (i);
        "q.push_back(q" + s + ");";
    } catch (boost::bad_lexical_cast &) {
        std::cout << "Some error message \n";
    }
}

Он компилируется (без синтаксических ошибок), но не работает. Я не знаю, как смешивать операторы cpp и строки, чтобы составить оператор.

Любая помощь здесь будет высоко оценена. Спасибо!

Ответы [ 6 ]

1 голос
/ 19 сентября 2011

Как насчет:

for (int i = 1; i <= 100; i++)
{
    std::cout << "q.push_back(q" << i << ");\n";
}
0 голосов
/ 19 сентября 2011

Переменные q1, q2, ..., q100 должны быть в первую очередь массивом.

0 голосов
/ 19 сентября 2011

Если мое понимание того, что вы пытаетесь сделать, является правильным, то вы в основном хотите автоматически сгенерировать некоторый код. Для этого люди обычно используют простые макроопределения ...

Вы можете просто определить макрос, который берет ваше соответствующее целое число из цикла for в качестве параметра и расширяет его до требуемого кода ...

Быстрый взгляд на [http://en.wikipedia.org/wiki/C_preprocessor#Token_concatenation]. Вы можете использовать ## в макросах для склеивания вещей, чтобы вы могли использовать что-то вроде следующего, внутри цикла for для i:

#define MY_PUSH(vector, i) vector.push_back(q##i);

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

0 голосов
/ 19 сентября 2011
std::ostringstream os;
for( int i = 1; i < 100; ++i)
{
   os << "s.push_back( q" << i << "); ";
}
std::string result = os.str();
// Do what you need with result

Ваша выходная строка была помещена в цикл for, поэтому при каждом цикле строка инициализируется, а содержимое, сгенерированное в предыдущем цикле, теряется.

0 голосов
/ 19 сентября 2011

Вы не говорите ему, куда поместить эту строку, она просто создает временную. Попробуйте добавить к s.

std::string s = "q.push_back(q";
s.append(boost::lexical_cast<std::string > (i));
s.append(");");

Не ясно, что вы ожидаете делать со строкой. Если вы печатаете его на std::cout, то ваше сообщение об ошибке будет перепутано с результатами. Вы должны использовать std::cerr вместо.

std::cerr << "Some error message" << std::endl;
0 голосов
/ 19 сентября 2011

Если вы используете std::string (который выглядит так, как вы), попробуйте s.append(str);

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