C或C ++。 如何比较给出char *指针的两个字符串?

我正在以两种方式对我的汽车arrays进行排序。 一年一年,如下所示。 和另一个由make。 Make是一个char *当我指向它们时,如何比较字符串?

int i, j; for(i=0; i<100; i++){ for(j=0; jyear > carArray[j+1]->year){ swap(carArray[j], carArray[j+1]); } } } } 

上述方法适用于int(年)。 如何使它适用于char指针?

在几乎任何一个中, 方法是调用strcmp 。 如果您的字符串(出于某种奇怪的原因)未终止NUL,则应使用strncmp代替。

但是,在C ++中,你真的不应该在char数组中操作字符串,如果你可以合理地避免它。 请改用std::string

我认为你需要使用strcmp()函数。

确保char *不为null,如果需要,请查找stricmp()函数以进行不区分大小写的比较。 否则,请使用strcmp()。

char *实际上表示每个字符串中第一个字符的内存地址。 所以你真的不想比较指针的值,而是指向它们指向的内容。

在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 

我当然假设你有汽车制造的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/

当你需要专门比较两个char指针时 ,你可以用通常的方式比较它们:通过使用比较运算符<>==等。

在这种情况下的问题是你不需要比较两个char指针。 你需要做的是比较这些char指针指向的两个C风格的字符串 。 为了比较C风格的字符串,您必须使用标准的strcmp函数。

最重要的是 ,在排序算法中处理null元素的方法似乎没有任何意义。 想象一下,输入数组包含交替的空指针和非空指针。 很明显,你的排序算法永远不会对任何东西进行排序,因为if的条件永远不会成立。 您需要重新考虑对null元素的处理。 当然,首先,你必须决定如何处理它们。 忽略并留在原地? 推到arrays的一端? 还有其他什么?

strcmp()将帮助您比较两个char * http://www.cplusplus.com/reference/cstring/strcmp/?kw=strcmp

您应该使用qsort (在C中, #include )或std::sort (在C ++中, #include )而不是像这样的冒泡排序。 如果它是C ++并且您使用@TED的建议来使用std::string而不是原始C字符串,则甚至不必指定比较,因为将使用<运算符并且将执行正确的操作。