【问题标题】:Convert a String in C++ Code在 C++ 代码中转换字符串
【发布时间】:2009-08-02 13:55:37
【问题描述】:

我正在学习 C++ 并开发一个项目来练习,但现在我想在代码中转换一个变量(字符串),像这样,用户有一个包含 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;"

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

谢谢!

【问题讨论】:

    标签: c++ string


    【解决方案1】:

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

    因此,程序不可能即时读取 C++ 代码并执行它,因为该代码需要编译。

    【讨论】:

    • 你在和这家伙浪费时间。
    • 尼尔,我也经常这么想,但另一方面,如果你不解释,有些人就不会学到东西——然后会浪费他们和其他人更多的时间。
    • 看看他以前的帖子。我们中的一些人尝试过,但我已经放弃了。
    • @Neil 不要再表现得像个 C++ 人,最好的人,对正在努力学习的人更加友好!
    • @Nathan:您对 C++(和其他命令式语言)的工作方式存在根本性的误解。你必须重新设计它,而不是仅仅因为是 C++ 中的“新手”而放弃它。
    【解决方案2】:

    你在做 cout 对吗?所以很明显它会显示出来。

    也许您正在尝试做的是在像这样http://www.codeproject.com/KB/DLL/code_injection.aspx这样的正在运行的进程中进行一些代码注入

    【讨论】:

    • 但是我如何在不使用 cout 的情况下进行代码注入。谢谢!
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        虽然动态编译和链接 C++ 代码在技术上是可行的,但它非常棘手,结果可能不太可靠 - 考虑一下“脚本”作者滥用指针并丢弃重要内容的可能性有多大。

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

        【讨论】:

          【解决方案6】:

          正如其他人所指出的,c++ 通常是一种编译语言,并且根本不为此提供本机支持。

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

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-03-09
            • 1970-01-01
            • 2019-05-18
            • 1970-01-01
            • 2021-10-27
            • 1970-01-01
            • 2017-07-08
            • 1970-01-01
            相关资源
            最近更新 更多