如何在 C 中从一个建筑物中删除另一个建筑物的 2 个字符串

How to remove 2 strings from one building another in C

我真的无法正确表达标题,所以请完整阅读这个问题。

我正在尝试制作一种自定义语言,效果非常好。

我想创建一个输入命令,逻辑上将变量保存到内存中供以后调用,这已经奏效,下面的例子没有任何问题,问题是打印 tree->parts[3].value 会导致打印任何内容直到它遇到一个空格,但是如果你想让代码询问用户这个: Your Input: 它会切断其余部分。变量 string 包含所有内容,而不仅仅是它的一部分,这意味着通过从中剥离 tree->parts[1].valuetree->parts[2].value,可以得到可以打印的完整字符串。

我对这部分有点迷茫,不知道从哪里开始,因为我通常使用 C++ 和 RegEX 或某些 C++ 函数来做这件事。
我可以将我的代码移植到 C++ 并在那里执行,但我如何使用 C 实现此目的?

命令如下:input [Variables Name] = [String to print before asking input]
例如。 input name = What's your name?.

在不深入研究代码的情况下,这里有一些有用的片段提供了一个“可重现的例子”。


创建和设置变量 + parseString 方法:

int setVariable(char *name, char *value, struct Memory *memory);

int createVariable(char *name, char *value, struct Memory *memory);

void parseString(char *buffer, struct Tree *tree, struct Memory *memory);

tree 结构:

struct Tree {
    int ignore;
    char ignoreType;

    int indent;
    struct Parts parts[10];
    int partsLength;
    struct Strings strings[10];
    int stringsLength;
};

如果需要 memory 结构:

struct Memory {
    struct Variables {
        char name[128];
        char value[MAX_STRING];
        int length;
    }variables[50];
    int variablesLength;
    struct Labels {
        char name[128];
        int line;
        int lastUsed;
    }labels[50];
    int labelsLength;
};

用于输入的代码:

else if (!strcmp(first, core->command[11].first)) {
    // input
    char input[100];
    printf(string);
    printf(tree->parts[3].value);
    scanf("%s", input);
    createVariable(
        tree->parts[1].value,
        input,
        memory
    );
}

要将 "input name = What's your name?" 解析为 "input""name""What's your name?",请使用 sscanf()"%n" 标记扫描停止的位置。

char var[128];
int n = 0;
sscanf(input, " input %127s = %n", var, &n);
// If success
if (n > 0) {
  printf("var %s = <%s>\n", var, input + n);
}