CPP int在语句问题中字符串

时间:2011-09-19 15:41:06

标签: c++ string

我必须写一些类似

的内容
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 个答案:

答案 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)

变量q1q2,...,q100应该首先是一个数组。