如何更改输入字符串中提到的变量

How to change variable mentioned in input string?

本文关键字:变量 何更改 输入 字符串      更新时间:2023-10-16

我有一个学生项目要上学,我主要用PHP编程,所以C++不是我的强项:)请告诉我,有可能更改我在cin字符串中提到的变量吗?也许我下面的代码会更容易理解:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
string A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, R, Q, S, T, U, V, W, X, Y, Z;
string instrukcja;
string krok[3];
int i = 0;
string MAKENULL()
{
    return " ";
}
void WRITE(string x)
{
    cout << x;
}
int main()
{   
    // get instruction Begin
    char s[10];
    scanf("%10[0-9a-zA-Z ]", s);
    istringstream iss(s);
    while(iss)
    {
        string sub;
        iss >> sub;
        krok[i] = sub;
        i++;
    }
    // get instruction End

    if (krok[0] == "MAKENULL")
    {
        "" Variable in krok[1] "" = MAKENULL();
    }
    if (krok[0] == "WRITE")
    {
        WRITE("" Variable in krok[1] "");
    }
    if (krok[0] == "OPPOSITE")
    {
        OPPOSITE("" Variable in krok[1] "", "" Variable in krok[2] "")
    }
}

在上面的代码中,我会做一些类似于ADD A B的操作,A应该变成A=>A+B(一个字符串粘在另一个字符串上)。主要问题是,我可以在scanf中指向一个变量进行更改吗?

如果我理解正确,那么就不用把变量保持为现在的A、B、C,。。。你需要一个地图容器:

#include <map>
// ...
std::map<std::string, std::string> varMap;

其中key是变量名:A、B、C,value是其值。

然后您可以使用当前的读取方式,当您为变量A赋值时,您可以使用:

varMap["A"] = newValue;

当你阅读它时,你也使用std::string value = varMap["A"],但这里要小心,如果映射中不存在"A",它将被创建并初始化值(默认构造函数被调用,因此它将是空字符串)。要检查密钥是否存在,请使用if (varMap.find("A") == varMap.end()) {/*no such variable*/}

另一件事是,如果你发布流的使用是错误的,你应该在使用它之前检查一下是否读过什么,正确的习惯用法是:

istringstream iss(s);
string sub;
while(iss >> sub)
{
    krok[i] = sub;
    i++;
}

[编辑]

您可能想到的是使用类似php的变量概念的可能性,或者来自java和其他语言的反射。在c++中没有这样的东西,建议使用类似map的关联容器,就像在php中一样。