有没有办法替换字符串">"用>在'如果'条件?

时间:2016-06-17 22:02:57

标签: c++

我遇到了以下用例,但我找不到合适的解决方案。 有没有办法替换字符串&#34;&lt;&#34;或&#34;&gt;&#34;条件<>处于if状态?

示例:

  string condition = "<";
  if (10 condition 8)   // Here I want to replace condition with <
  {
      // Some code
  }

我不想这样做:

if ("<" == condition)
{
   if (10 < 8)
   {
   }
}
else if (">" == condition)
{
   if (10 > 10)
   {
   }
}

我的病情会在运行期间发生变化。如果存在于上面,我只是在寻找一种简单的方法。

用例:用户将提供如下查询:

input: 10 > 9   =>  output: true
input: 10 < 7   =>  output: false

基本上我需要解析这个查询,因为我将这3个单词(10,&gt;,9)作为字符串,并且我想以某种方式转换字符串&#34;&gt;&#34;或&#34;&lt;&#34;到实际符号><

5 个答案:

答案 0 :(得分:5)

您可以通过std::lessstd::map将字符串映射到标准库比较器仿函数,例如std::unordered_map

答案 1 :(得分:5)

您无法在C ++中创建新的运算符( Can I create a new operator in C++ and how? )。我可以看到你从这个想法来自哪里,但语言不支持这一点。但是,您可以创建一个函数,该函数接受两个操作数和一个字符串“argument”并返回适当的值。

bool CustomCompare(int operand1, int operand2, string op)
{
    if (op == "<")
    {
        return operand1<operand2;
    }
    if (op == ">")
    {
        return operand1>operand2;
    }
    if (op == "_")
    {
        return DoTheHokeyPokeyAndTurnTheOperandsAround(operand1, operand2);
    }
}

答案 2 :(得分:3)

std::function<bool(int,int)> comparator = std::less;
if(comparator(10, 8))
{
    //some code
}

另见:

答案 3 :(得分:0)

如果你是一个C ++忍者,并且你非常顽固地让它按照你希望的方式工作,那么就有办法,但它是先进而复杂的。

我主要为POSIX编写VxWorks代码,但我想其他任何代码都可以。{/ p>

让我们说:string myExpression = "mySize > minSize";

  1. &#34;将字符串重建为C代码&#34; (保存到文件,使用ccppcgccgpp,无论您拥有什么工具链。)
  2. 您需要将其与您的代码相关联,至少要获得mySize&amp;的ELF重定位。 minSize(我认为如果您自定义ld命令,可以使用app-load完成。
  3. 使用ld
  4. 加载代码
  5. 跳转到您加载代码的新地址。
  6. 所有这一切,我不建议你这样做:

    1. 非常复杂。
    2. 不是最稳定,非常容易出错/错误。
    3. 可能导致重大漏洞&#34;黑客&#34;样式, 需要适当的卫生设施。
    4. 我能看到的唯一专家是,这种方法支持 C 提供的所有功能! BitWise,+ - / * ^ !,甚至可以用作pow()等。

      更好一点是:

      将函数编译为:

      `"bool comparer_AB(int a, int b) { return a " + operator + "}"`
      

      然后拨打comparer_AB();

答案 4 :(得分:0)

#include <functional>
#include <map>
#include <string>

int main()
{
  using operation = std::function<bool(int,int)>;
  std::map<std::string, operation> mp = 
    {{"<", std::less<int>()}, 
     {">", std::greater<int>()}};

  int x = 5; 
  int y = 10;
  std::string op = "<";

  bool answer = mp[op](x, y);
}