Tag: 比较

为什么“for(i = 100; i <= 0; –i)”永远循环?

unsigned int i; for (i = 100; i <= 0; –i) printf("%d\n",i);

通过C语言中的整数转换进行浮点数比较

我想得到一个确切/准确的答案为什么以下代码打印不同的结果: #include “stdio.h” int main(void) { int a = 9; int b = 10; printf(“%d\n”, (double)a / (double)b == 0.9); /* prints 0 */ printf(“%d\n”, (double)9 / (double)10 == 0.9); /* prints 1 */ return 0; } 我认为这可能是编译器依赖的,我的是gcc(GCC mingw Windows7)4.8.1和gcc(Debian 4.7.2-5)4.7.2。 非常感谢你! UPDATE! 我使用和不使用-std = c99选项生成汇编代码,这应该有助于理解这里发生的事情。 没有-std = c99(这给出结果0/1): .file “ac” .section .rodata.str1.1,”aMS”,@progbits,1 .LC0: .string […]

LibXML2中有“二进制转储”或“获取二进制表示”function?

我需要访问加载的XML DOM的内部二进制表示… 有一些转储函数 ,但我没有看到类似“二进制缓冲区”(只有“XML缓冲区”)。 我的最后一个目标是在一些黑盒程序之前和之后逐字节地比较同一文档 ,直接用它们的二进制(当前和缓存)表示,而不转换(到XML文本表示)……所以,这个问题, LibXML2中有一个二进制表示(内存中结构),用于将转储与当前表示进行比较? 我只需要检查当前和转储的DOM是否相同。 细节 这不是比较两个不同DOM对象的问题 ,而是更容易的事情,因为不更改ID等不需要规范表示(!),只需要访问内部表示,因为它比转换为文本快得多。 在“之前和之后”之间有一个黑盒程序 ,例如。 影响(或不影响)某些节点或属性的XSLT Identity转换 。 替代解决方案 …为LibXML2开发一个C函数,逐个节点地比较两个树,如果它们不同则返回false:在树遍历期间,如果树结构发生变化,或者某个nodeValue发生变化,算法将停止比较(返回假)。 …不是理想的,但有助于其他一些算法:如果我可以访问(在LibXML2中) 节点的总数或总长度或大小或md5或sha1 …仅用于优化频繁的情况(对于我的应用程序)比较将返回false,避免完整的比较过程。 笔记 相关问题 如何通过简单快速的比较来检查是否更改了DomDocument? C逐字节比较 libxml xmlNodePtr到原始xml字符串? 使用已解答解决方案的读者警告 问题是“在之前与后箱操作之后进行比较”,但这里有两种后箱 : 众所周知且可控的,如XSLT转换或使用已知库。 您必须知道您的黑盒子不会更改属性顺序或ID内容或非空化(或等)空格。 完全免费的,例如使用外部编辑器(例如在线编辑器更改XHTML),用户和软件可以做任何事情。 我将在“众所周知的”黑盒子的背景下使用解决方案 。 因此,我在上面“详细信息”部分的评论是有效的。 在“完全免费”后台的上下文中,您不能使用“二进制转储的比较”,因为只有规范表示(C14N)才有效进行比较。 为了通过C14N标准进行比较,只有“替代解决方案”(上面评论)是可能的。 对于alternative-1,除了其他之外,您必须在比较一组属性节点之前进行排序。 对于alternative-2( 也在这里讨论 ),生成C14N转储。 PS:当然,使用C14N标准是主观的,取决于应用 :if,p。 例如,对于您的应用,“更改属性顺序”是一个有效/重要的更改,检测它的比较是有效的(!)。

c字符串比较与哈希比较

我需要将一个字符串与c中的多个其他常量字符串进行比较。 我很好奇哪个更快,散列我要比较的字符串并将其与所有其他常量字符串哈希进行比较,或者只是将字符串作为字符串进行比较。 先感谢您 谢谢你的答案,我将做很多比较。 任何人都可以给我一个好的,快速的,低资源密集型的算法吗? 我所知道的唯一哈希是MD5,我有一种过度杀戮的感觉。 我还想补充一点,字符串最大可能是20或30个字符,大多数是7左右。

所有数组元素的比较 – C算法

我有一个矩阵m * n ,对于每一行,我需要比较它们之间的所有元素。 对于我发现的每对情侣,我将调用一个将执行某些计算的函数。 例: my_array -> {1, 2, 3, 4, 5, …} I take 1 and I have: (1,2)(1,3)(1,4)(1,5) I take 2 and I have: (2,1)(2,3)(2,4)(2,5) and so on 使用CI写道: for (i=0; i<array_length; i++) { for (k=0; k<array_length; k++) { if (i==k) continue; //Do something } } } 我想知道我是否可以使用复杂度较低的算法。

大于和小于switch语句C

我正在尝试编写一个有很多比较的代码 在“QUANT.C”中编写一个“量化”数字的程序。 读取整数“x”并测试它,产生以下输出:x大于或等于1000打印“巨大正面”x从999到100(包括100)打印“非常正”x在100和0之间打印“正面” x正好0打印“零”x介于0和-100之间打印“负”x从-100到-999(包括-100)打印“非常负”x小于或等于-1000打印“非常消极”因此-10将打印“负面”,-100“非常消极”和458“非常积极”。 然后我尝试使用开关解决它,但它不起作用,我是否必须使用if语句解决它或有一个方法来解决它使用开关? #include int main(void) { int a=0; printf(“please enter a number : \n”); scanf(“%i”,&a); switch(a) { case (a>1000): printf(“hugely positive”); break; case (a>=100 && a=0 && a-100 && a<0): printf("negative"); break; case (a-999): printf(“very negative”); break; case (a<=-1000): printf("hugely negative"); break; return 0; }

如何使用C程序检测文件中的特定字符串

我有一个文件,我想使用文件操作使用C程序读取此文件。 然后我想从该文件中获取参数。 让我们说nalu_type = x。 因此,每当我检测到该文件中的字符串nalu_type时,我想将值x放在由我定义的数组中。 请告诉我怎么做。 先谢谢Sanket

C:如何比较两个字符串?

编辑:这是重复的,我已经标记了它。 见[问题] 为什么C中的“a”!=“a”? 所以我试图根据结构中的字段打印出特定的消息。 该字段包含字符串“1”。 每当我运行printf(“%s”, record.fields[2]); 输出为1 ; 我没有格式警告。 但是,当我针对相应的字符串(在本例中为“1”)检查字段时,它未通过检查: if (record.fields[2] == “1”) { printf(“The field is 1!”); }

字符串比较C – strcmp()

我试图比较两个字符串,但我没有实现这一点。 为什么? #include #include int main(){ float a = 1231.23123; char b[32]; sprintf(b, “%f”, a); printf(“%s\n”, b); char c[32] = “1231.23123”; if (strcmp(c, b) == 0){ printf(“SUCCES\n”); } else{ printf(“DIFFER\n”); } return 0; } 结果: 1231.231201 DIFFER

C中的字符比较

我试图比较两个字符,看看一个是否比另一个更大。 为了看看它们是否相等,我使用了strcmp 。 有什么类似于我可以使用的strcmp吗?