如何在 C 中从一个建筑物中删除另一个建筑物的 2 个字符串
How to remove 2 strings from one building another in C
我真的无法正确表达标题,所以请完整阅读这个问题。
我正在尝试制作一种自定义语言,效果非常好。
我想创建一个输入命令,逻辑上将变量保存到内存中供以后调用,这已经奏效,下面的例子没有任何问题,问题是打印 tree->parts[3].value
会导致打印任何内容直到它遇到一个空格,但是如果你想让代码询问用户这个: Your Input:
它会切断其余部分。变量 string
包含所有内容,而不仅仅是它的一部分,这意味着通过从中剥离 tree->parts[1].value
和 tree->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);
}
我真的无法正确表达标题,所以请完整阅读这个问题。
我正在尝试制作一种自定义语言,效果非常好。
我想创建一个输入命令,逻辑上将变量保存到内存中供以后调用,这已经奏效,下面的例子没有任何问题,问题是打印 tree->parts[3].value
会导致打印任何内容直到它遇到一个空格,但是如果你想让代码询问用户这个: Your Input:
它会切断其余部分。变量 string
包含所有内容,而不仅仅是它的一部分,这意味着通过从中剥离 tree->parts[1].value
和 tree->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);
}