繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM