在C ++代码中转换字符串

时间:2009-08-02 13:55:37

标签: c++ string

我正在学习C ++并开发一个项目来练习,但现在我想在代码中转换变量(String),像这样,用户有一个包含C ++代码的文件,但我希望我的程序读取将文件插入代码中,如下所示:

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;
int main( int argc, char* argv[] )
{
    ifstream file(argv[ 1 ]);
    if (!file.good()) {
       cout << "File " << argv[1] << " does not exist.\n";
      return 0;
    }
    string linha;
    while (!file.eof())
    {
    getline(file, linha);
    if (linha.find("code") != string::npos)
       {
          size_t idx = linha.find("\""); //find the first quote on the line
          while ( idx != string::npos ) {
             size_t idx_end = linha.find("\"",idx+1); //end of quote
             string quotes;
             quotes.assign(linha,idx,idx_end-idx+1);
             // do not print the start and end " strings
             cout << quotes.substr(1,quotes.length()-2) << endl;
             //check for another quote on the same line
             idx = linha.find("\"",idx_end+1);
             } 
       }
    }
  return 0;
}

这是一个文件例子:

code "time_t seconds;\n seconds = time (NULL);\n cout << seconds/3600;"

但是当我运行程序时,它不会将字符串转换为代码,但它会精确打印引号中的内容。

谢谢!

6 个答案:

答案 0 :(得分:5)

C ++是一种编译语言,而不是解释语言。

因此,程序无法即时读取C ++代码并执行它,因为此代码需要编译。

答案 1 :(得分:3)

你正在做cout吗?显然它会被显示出来。

也许您要做的是在正在运行的流程中注入一些代码,例如http://www.codeproject.com/KB/DLL/code_injection.aspx

答案 2 :(得分:1)

您想要的是在运行时实际评估字符串。 C ++或其他非解释/搜索语言不直接支持此功能。

答案 3 :(得分:1)

你无法在C ++中做你想做的事。要评估命令行参数,您需要在程序中嵌入脚本语言(Python似乎是一个很好的例子 - 它并不难)。字符串参数可以作为Python代码进行评估。

答案 4 :(得分:0)

如果目标是执行一些外部提供的脚本,我建议将脚本指定为常用的脚本语言之一。我们多年前用perl做过这个。这个link text描述了如何。

虽然动态编译和链接C ++代码在技术上是可行的,但它非常棘手,结果可能不太强大 - 请考虑“脚本”作者滥用指针并破坏重要内容的方式。

对于技术水平较低的作者来说,脚本语言往往比C ++更容易处理

答案 5 :(得分:0)

正如其他人已经注意到c ++通常是一种编译语言,并且根本不提供本机支持。

您提出问题的两个可能的解决方案:

  • 查找并使用c ++解释器。关于此问题有几个StackOverflow问题,并且至少存在两个这样的软件。我更喜欢cint
  • 在代码上调用c ++编译器以生成动态库,随后加载并调用该库。这与您的示例不完全相同,但用户必须提供“可调用”代码(即一个或多个功能)。

您可能想要的问题的可能解决方案:

  • 使用扩展语言,如python,tcl或lua。