[英]C or C++. How to compare two strings given char * pointers?
我正在以两种方式对我的汽车阵列进行排序。 如下所示。 和另一个制造商。 Make 是一个字符* 当我只有指向字符串的指针时,如何比较字符串?
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's (year)。 我怎样才能使它适用于字符指针?
在几乎任何一种情况下,方法都是调用strcmp
。 如果您的字符串(出于某种奇怪的原因)未以 NUL 终止,则应改用strncmp
。
但是,在 C++ 中,如果可以合理避免的话,您真的不应该操作 char 数组中的字符串。 改用std::string
。
我认为您需要使用 strcmp() 函数。
确保 char * 不为空,如果需要,请查找 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
strcmp() 将帮助您比较两个字符* http://www.cplusplus.com/reference/cstring/strcmp/?kw=strcmp
我当然假设这里你有汽车制造商的字符 *
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/
你真的应该使用qsort
(在 C 中, #include <stdlib.h>
)或std::sort
(在 C++ 中, #include <algorithm>
)而不是像这样的冒泡排序。 如果它是 C++ 并且你接受@TED 的建议使用std::string
而不是原始 C 字符串,你甚至不必指定比较,因为<
运算符将被使用并且会做正确的事情。
当您需要专门比较两个字符指针时,您可以用通常的方式比较它们:使用比较运算符<
、 >
、 ==
等。
在部份情况下的问题是,你并不需要比较两个字符指针。 但是,您需要做的是比较这些字符指针指向的两个 C 样式字符串。 为了比较 C 风格的字符串,您必须使用标准的strcmp
函数。
最重要的是,在排序算法中处理空元素的方法似乎没有任何意义。 想象一个包含交替空指针和非空指针的输入数组。 很明显,您的排序算法永远不会对任何内容进行排序,因为if
的条件永远不会为真。 您需要重新考虑对空元素的处理。 当然,首先,您必须决定如何处理它们。 忽略并留在原地? 推到数组的一端? 还有什么?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.