我正在以两种方式对我的汽车阵列进行排序。一年一年,如下所示。和另一个由make。 Make是一个char *如果我只是指向它们,我如何比较字符串?
int i, j;
for(i=0; i<100; i++){
for(j=0; j<100-i; j++){
if(carArray[i]!=NULL && carArray[j]!= NULL && carArray[j+1]!=NULL){
if(carArray[i]->year > carArray[j+1]->year){
swap(carArray[j], carArray[j+1]);
}
}
}
}
上述方法适用于int(年)。如何让它适用于char指针?
答案 0 :(得分:28)
几乎任何一个,方式是致电strcmp
。如果您的字符串(出于某些奇怪的原因)未终止NUL,则应使用strncmp
代替。
但是,在C ++中,如果你可以合理地避免它,你真的不应该在char数组中操作字符串。请改用std::string
。
答案 1 :(得分:13)
我认为你需要使用strcmp()函数。
答案 2 :(得分:2)
确保char *不为null,如果需要,请查找stricmp()函数以进行不区分大小写的比较。否则,请使用strcmp()。
char *实际上表示每个字符串中第一个字符的内存地址。所以你真的不想比较指针的值,而是指向它们指向的内容。
答案 3 :(得分:1)
在C中它的strcmp()函数如前所述。在C ++中,您可以使用compare()函数。
C:
char str1[10] = "one";
char str2[10] = "two";
if (strcmp(s, t) != 0) // if they are equal compare return 0
C ++
string str1 ("one");
string str2 ("two");
if (str1.compare(str2) != 0) // if they are equal compare return 0
答案 4 :(得分:0)
我当然在这里假设你有汽车制造的char *
int i, j;
for(i=0; i<100; i++){
for(j=0; j<100-i; j++){
if(carArray[i]!=NULL && carArray[j]!= NULL && carArray[j+1]!=NULL){
if(strcmp(carArray[i]->make, carArray[j+1]->make) == 0)
{
//Do whatever here
}
}
}
}
您希望与0进行比较,因为如果两个字符串之间没有差异,strcmp将返回0
strcmp需要两个const char *。
http://www.cplusplus.com/reference/clibrary/cstring/strcmp/
答案 5 :(得分:0)
您应该使用qsort
(在C,#include <stdlib.h>
)或std::sort
(在C ++中,#include <algorithm>
)而不是像这样的冒泡排序。如果它是C ++并且您使用@ TED的建议来使用std::string
而不是原始C字符串,则甚至不必指定比较,因为将使用<
运算符并且将执行正确的操作的事情。
答案 6 :(得分:0)
当您需要专门比较两个字符串指针时,您可以按照常规方式对它们进行比较:使用比较运算符<
,>
,==
等
在这种情况下的问题是你不需要比较两个char指针。你需要做的是比较这些char指针指向的两个C风格的字符串。为了比较C风格的字符串,您必须使用标准strcmp
函数。
除此之外,在排序算法中处理null元素的方法似乎没有任何意义。想象一个包含交替空指针和非空指针的输入数组。很明显,您的排序算法永远不会对任何内容进行排序,因为if
中的条件永远不会成立。您需要重新考虑对null元素的处理。当然,首先,你必须决定如何处理它们。忽略并留在原地?推到阵列的一端?还有其他什么?
答案 7 :(得分:0)
strcmp()将帮助您比较两个char * http://www.cplusplus.com/reference/cstring/strcmp/?kw=strcmp