C 或 C++。如何比较给定 char * 指针的两个字符串?
Posted
技术标签:
【中文标题】C 或 C++。如何比较给定 char * 指针的两个字符串?【英文标题】:C or C++. How to compare two strings given char * pointers? 【发布时间】:2011-01-20 18:46:33 【问题描述】:我以两种方式对我的汽车数组进行排序。一年一个,如下所示。和另一个由制造。 Make is a 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 指针?
【问题讨论】:
在一个不相关的说明:你知道冒泡排序是超级低效的,对吧? 在非常大的输入上,它是超级低效的。在较小的输入尺寸上,它实际上可以比更性感的类型更快,因为它实现起来非常简单。当然,对于小输入(比如这个),速度无论如何都不是问题。 但是如果你想对小的输入进行排序,你不妨使用插入排序,它的平均性能更好,即使它也是 O(n^2) 【参考方案1】:在任何一种情况下,方式都是致电strcmp
。如果你的字符串(出于某种奇怪的原因)不是 NUL 终止的,你应该改用strncmp
。
但是,在 C++ 中,如果您可以合理地避免它,您真的不应该在 char 数组中操作字符串。请改用std::string
。
【讨论】:
既然你在排序,std::sort 也是你的朋友。 cplusplus.com/reference/algorithm/sort 您只需要提供一个比较函数供 std::sort 使用。【参考方案2】:我认为你需要使用 strcmp() 函数。
【讨论】:
【参考方案3】:确保 char * 不为空,如果需要,请查找 stricmp() 函数以进行不区分大小写的比较。否则,使用 strcmp()。
char * 实际上表示每个字符串中第一个字符的内存地址。所以你真的不想比较指针的值,而是它们指向的内容。
【讨论】:
stricmp() 不是标准的:***.com/questions/1784767/… 我认为这是 Microsoft 特有的。 如果 stricmp() 不在您的库中,还要检查 strcmpi() 是否存在 strcasecmp()。具有该功能的东西将在那里。【参考方案4】:如前所述,在 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
【讨论】:
呃,不,你不应该在这里使用compare
。这就是字符串上的==
运算符的用途。使用比较的唯一原因是当您关心一个字符串(按字母顺序)是否小于或大于另一个时。
@T.E.D. compare
函数进行数字(字符值)而不是字母比较。 IE。字符串的字典比较。【参考方案5】:
我当然假设这里你有汽车制造商的 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/
【讨论】:
【参考方案6】:当你需要比较两个char指针时,你可以用通常的方式比较它们:使用比较运算符<
、>
、==
等。
这种情况下的问题是您不需要比较两个字符指针。不过,您需要的是比较这些 char 指针所指向的两个 C 风格的字符串。为了比较 C 风格的字符串,你必须使用标准的strcmp
函数。
除此之外,在排序算法中处理空元素的方法似乎没有任何意义。想象一个包含交替空指针和非空指针的输入数组。很明显,您的排序算法永远不会对任何内容进行排序,因为您的 if
中的条件永远不会为真。您需要重新考虑对 null 元素的处理。当然,首先,您必须决定如何处理它们。忽略并留在原地?推到阵列的一端?还有什么?
【讨论】:
【参考方案7】:strcmp() 将帮助您比较两个 char* http://www.cplusplus.com/reference/cstring/strcmp/?kw=strcmp
【讨论】:
【参考方案8】:你真的应该使用qsort
(在 C 中,#include <stdlib.h>
)或std::sort
(在 C++ 中,#include <algorithm>
)而不是像这样的冒泡排序。如果它是 C++ 并且您接受 @TED 的建议使用 std::string
而不是原始 C 字符串,您甚至不必指定比较,因为将使用 <
运算符并且会做正确的事情。
【讨论】:
以上是关于C 或 C++。如何比较给定 char * 指针的两个字符串?的主要内容,如果未能解决你的问题,请参考以下文章
如何检查给定的 c++ 字符串或 char* 是不是仅包含数字?
C++标准库 如何连接两个const char *类型字符串,并返回const char * 类型结果?