2011-03-30 145 views
7

我想比较两个字符串。可以用strcmp吗? (我试过了,似乎没有工作)。是string::compare的解决方案?strcmp或string :: compare?

除此之外,有没有办法将stringchar进行比较?


感谢您的早期评论。我用C++编码,是的,就像你上面提到的一些std::string一样。 我没有发布代码,因为我想学习一般知识,它是一个很长的代码,所以这个问题是无关紧要的。

我想我学会了C++和C之间的区别,谢谢指出。我现在会尝试使用重载操作符。并顺便string::compare工作。

+0

“好像不工作” - 你能更具体?什么是参数和结果是什么? – 2011-03-30 21:15:56

+0

如果您使用C++进行编程,那么您应该使用C++习惯用法,这意味着C++'string'及其相关方法。对于C语言使用的C语言,比如'char *'和'strcpy'。 – 2011-03-30 21:16:45

+0

你是什么意思“似乎不工作”? – helloworld922 2011-03-30 21:16:54

回答

21

对于C++,请使用std::string并使用string::compare进行比较。

对于C使用strcmp。如果您的(我的意思是您的程序)字符串(某些奇怪的原因)不是nul终止,请改为使用strncmp

但为什么作为==简单的std::string 有人使用的东西吗?

12

假设你的意思是std::string,为什么不使用重载操作符:str1 == str2,str1 < str2

+0

看到我对ildjarn的文章的评论,为什么你会想要别的东西。 – diverscuba23 2011-03-30 21:21:57

1

当使用C++使用C++函数即, string::compare。当使用C和你不得不使用char*字符串,使用strcmp

3

std::basic_string::comparestd::basic_string operators reference(尤其是存在operator==operator!=operator<等)。你还需要什么?

+0

你也可以试着弄清楚一个字符串是否等于,大于或小于另一个字符串(认为哪个分支下降以获得树结构),在这种情况下,类似strcmp的函数更有用。 – diverscuba23 2011-03-30 21:20:55

+0

@ diverscuba23:确实是公平点。 : - ]在这种情况下,仍然存在'std :: string :: compare',因为@Paul R的评论,它应该优于C++中的'strcmp'。我将编辑我的帖子。 – ildjarn 2011-03-30 21:31:39

1

通过你的问题,“有没有一种方法来比较字符串与字符?”你的意思是“我怎么知道字符串中是否包含特定的字符?”如果是这样,C库功能:

char *strchr(const char *s, int c); 

会为你做。

- pete

1

std :: string可以包含(和比较!)嵌入的空字符。

是*补偿(...)会比较C风格的字符串,比较到第一个空字符(或指定的最大Nr字节/字符)

字符串::比较的实际实施模板basic_string,所以你可以期望它可以用于其他类型,如wstring

关于“比较字符串与字符”的不清楚的短语,您可以比较char和*字符串。开始()或查找第一次出现(字符串:: find_first_of和string :: find_first_not_of)

免责声明:打在我的HTC,错别字保留:)