我不经常使用C,所以这对我来说有点棘手,尽管我确信这是一项非常简单的任务.我一直在努力研究如何做到这一点,我不认为我每次搜索都正确地说它.
我需要帮助搞清楚如何将char数组中的数字转换为整数.
基本上,我会有一个像"1:09 pm","11:12 AM","11:12 am"等字符数组.
我想弄清楚如何将这三件事分开,这样我就可以弄清楚(1)小时数,(2)分钟数,以及(3)是上午还是上午(大写与否)
到目前为止,我认为我有办法获得第一个数字:
char *time = arg[1]; // arg[1] is "1:09pm", etc
char *hours = strtok(time, ":");
int hours = atoi(hours);
Run Code Online (Sandbox Code Playgroud)
从那里,我不是100%肯定该怎么做.是否存在某种正则表达式类型解析函数,它将从":"转换为字母字符?
先感谢您!
我正在阅读我的比较语言课的笔记,我有点困惑......
上下文无关文法和确定性上下文无关文法有什么区别?我正在专门阅读有关 CFG 的解析器是 O(n^3) 以及 DCFG 的编译器是 O(n) 的内容,并且并不真正理解时间复杂度的差异如何如此之大(更不用说我仍然对使 CFG 成为 DCFG 的特征感到困惑)。
非常感谢您!
big-o parsing programming-languages context-free-grammar context-free-language
我一直在尝试创建一个动态分配的struct类型数组,label并且一直在失败.在我的.h文件中,我有:
typedef struct _label {
char name[256];
char type[256];
int address;
} label;
Run Code Online (Sandbox Code Playgroud)
在我的.c文件中,我在顶部有这个:
label* allLabels = (label*) malloc(sizeof(label) * 10); // line 10
int arrayIndex = 0;
Run Code Online (Sandbox Code Playgroud)
最后,我在同一个.c文件中有一个函数,用于将这些结构对象添加到数组中,供文件中的其他方法使用:
void addLabel(char line[], char type[], int addr) {
label database;
database.name = line; // line 805
database.type = type; // line 806
database.address = addr;
allLabels[arrayIndex] = database;
arrayIndex++;
}
Run Code Online (Sandbox Code Playgroud)
基本上我只想拥有一组可访问的标签.有人能帮助我理解我做错了什么吗?
我收到这些错误,我也没有忘记任何必要的#include语句:
formatBuilder.c:10:3: error: initializer element is not constant
formatBuilder.c: In function 'addLabel':
formatBuilder.c:805:18: error: incompatible types when assigning …Run Code Online (Sandbox Code Playgroud) 这都是相关的,我尽我所能将它们拼合起来,所以请耐心等待。
我对如何正确处理标签感到非常困惑。例如,在下面的代码位中,“ bne”转换为“ 00010101001001010000000000000001”,并且loopend的标签地址为0x00000020(32)
.text
la $a0, opOne
lw $a0, 0($a0)
la $a1, opTwo
lw $a1, 0($a1)
add $t0, $zero, $a0
addi $t1, $zero, 1
bne $t1, $a1, loopend
addi $t1, $t1, 1
loopend:
Run Code Online (Sandbox Code Playgroud)
当我向上移动loopend时,“ bne”变为“ 00010101001001011111111111111111”,loopend的地址变为0x00000008(8)
.text
la $a0, opOne
lw $a0, 0($a0)
loopend:
la $a1, opTwo
lw $a1, 0($a1)
add $t0, $zero, $a0
addi $t1, $zero, 1
bne $t1, $a1, loopend
addi $t1, $t1, 1
Run Code Online (Sandbox Code Playgroud)
因此,据我了解,在代码的第一位loopend是在八条指令之后,因此它的地址是4 * 8 = 32 = 0x00000020。在代码的第二位中,loopend是在两条指令之后,因此其地址为4 * 2或0x00000008。 …