我必须写一些类似
的内容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语句和字符串来制作复合语句。
任何帮助都将受到高度赞赏。谢谢!
答案 0 :(得分:1)
怎么样:
for (int i = 1; i <= 100; i++)
{
std::cout << "q.push_back(q" << i << ");\n";
}
答案 1 :(得分:0)
如果你正在使用std::string
(看起来像你),请尝试s.append(str);
答案 2 :(得分:0)
你没有告诉它放置该字符串的位置,它只是创建一个临时字符串。请尝试附加到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;
答案 3 :(得分:0)
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循环中,因此在每个循环中字符串被初始化,前一循环中生成的内容将丢失。
答案 4 :(得分:0)
如果我对你要做的事情的理解是正确的,那么你基本上想要自动生成一些代码。为此,人们通常使用简单的宏定义......
您可以定义一个宏,它将for循环中的相应整数作为参数,并扩展为您需要的代码...
快速浏览一下[http://en.wikipedia.org/wiki/C_preprocessor#Token_concatenation]。您可以在宏中使用##将事物粘合在一起,这样您就可以在i循环中使用类似下面的内容:
#define MY_PUSH(vector, i) vector.push_back(q##i);
但正如人们所建议的那样,首先使用变量数组可能更好,因为除了原始代码生成工具之外,宏基本上都是 evil ...
答案 5 :(得分:0)
变量q1
,q2
,...,q100
应该首先是一个数组。