我必须写一些类似的东西
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语句和字符串来生成复合语句。
如有任何帮助,我们将不胜感激。谢谢
怎么样:
for (int i = 1; i <= 100; i++)
{
std::cout << "q.push_back(q" << i << ");n";
}
如果您正在使用std::string
(看起来像是(,请尝试s.append(str);
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循环中,因此在每个循环中都会初始化字符串,上一个循环中生成的内容也会丢失。
您并没有告诉它将该字符串放在哪里,它只是创建了一个临时字符串。尝试附加到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;
变量q1
,q2
。。。,q100
本来应该是一个数组。
如果我对您尝试做的事情的理解是正确的,那么您基本上想要自动生成一些代码。为此,人们通常使用简单的宏定义。。。
您只需定义一个宏,该宏将for循环中的相应整数作为参数,并扩展到您需要的代码…
快速查看[http://en.wikipedia.org/wiki/C_preprocessor#Token_concatenation]。你可以在宏中使用##将东西粘合在一起,所以你可以在i的for循环中使用如下内容:
#define MY_PUSH(vector, i) vector.push_back(q##i);
但正如人们所建议的那样,首先使用一组变量可能会更好,因为宏基本上是邪恶的,而不是原始代码生成工具。。。