linux下c如何比较两个字符串内容是不是相等
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下c如何比较两个字符串内容是不是相等相关的知识,希望对你有一定的参考价值。
// 结构体
typedef struct fruit
10 char name[50]; // 水果名
11 int count; // 数 量
12 double price; // 单 价
13 fruit_t;
----------------------------------------------
int delete_fruit(fruit_t *p,int len)
99
100 fruit_t tmp;
101 int i = 0,j = 0,count = 0;
102
103 printf("请输入要删除的水果名:");
104 scanf("%s",tmp.name);
105 for(i = 0;i < len;i++)
106 if(strcmp(p[i].name,&tmp.name) == 0)
107 for(j = i;j < len-1;j++)
108 p[j] == p[j+1];
109 i--;
110 len--;
111 count++;
112
113
114 if(count == 0)
115
116 printf("未找到此水果!\n");
117
118 return len;
119
// 为什麼会出错,怎么修改呢?
108:10: 错误: 双目运算符 == 操作数(‘fruit_t’和‘fruit_t’)无效
直接if(strcmp(p[i].name,&tmp.name)) ? 那如何判断他们是否相等呢?
参考技术A strcmp是c的标准库函数,跨平台的,尽量用标准库函数 参考技术B ==是判断是否相等,你那里是要赋值? 应该用 = 号吧追问不是啊,就是相等! strcmp(a,b) == 0 判断字符串a 与 字符串b 是否相等!
追答p[j] == p[j+1]; 这句话 改成 = 号
strcmp函数是 如果相等 则返回0 不相等 则返回一个大于零的数
if(strcmp(p[i].name,&tmp.name))这句话如果相等则跳出if判断
使用 if(strcmp(p[i].name,&tmp.name) == 0) 或者if(!strcmp(p[i].name,&tmp.name))都可以
为啥JAVA不可以用“==”来比较两个字符串是不是相等?
Java中,如果两个字符串是这样 Sting a=“a” 赋值方式时,同样也可以使用 == 来比较是否相等,但实际上也不是在比较两个变量的内容,当新一个变量赋值时( Sting a=“a” 赋值方式会把值放到栈中)先会从栈中找是否有相同的值,如果有就会直接指向那个值,所以使用==也可比较是否相等。但如果是new String("a")这样new出字符串对象时,即使内容完全一样,使用==比较也是false,因为==比较的是堆内存中的地址,所以只能是用equals()方法比较内容。
C#可用 == 来比较两个字符串是否相等,其实底层也是使用了equals()方法来进行比较。 参考技术A 先说结论,不能。
两个对象进行比较,如果使用==符号,那么比较的是这两个对象的“引用”(类似C语言中指针的概念)。字符串比较,通常情况下比较的是字符串的值而非引用,不同的“引用”是可以对应相同值的,如果这时候用==比较,得出的结论是不相等,但是实际上它们的值是相等的。举例说明:
String a = new String("abc");
String b = new String("abc");
a == b; //false
a.equals(b) // true通过上面的例子可以看到,虽然两个字符串的值都是"abc",但是用==比较时,它们是不相等的,如果需要比较它们的值,应该使用equals()方法。
如果事情只是像这样的话,那么就简单了……可是还有个东西叫做“字符串常量池”,常量池的机制,会使得在某些情况下,==也能得出正确的结论,就不展开讲了,你只需要记得一点:对象比较的时候,==比较的是引用(指针),要比较对象的值,应当使用equals()方法。
参考:
《Java编程思想
第4版》机械工业出版社
P44-45
以上是关于linux下c如何比较两个字符串内容是不是相等的主要内容,如果未能解决你的问题,请参考以下文章
Java中比较字符串的内容是不是相等内部是如何比较的?还有比较字符串与比较它的哈希值哪个快?