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字符串,则甚至不必指定比较,因为将使用<
运算符并且将执行正确的操作。