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

时间:2010-02-24 23:03:12

标签: c++ c sorting pointers

我正在以两种方式对我的汽车阵列进行排序。一年一年,如下所示。和另一个由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指针?

8 个答案:

答案 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