为什么我可以使用char但不使用stricmp()的字符串?

时间:2017-09-11 15:05:29

标签: c++

这是代码:

char s[101], s1[101];
cin >> s >> s1;
cout << stricmp(s, s1);

我尝试将ss1声明为std::string,但它没有用。有人可以解释为什么stricmp()适用于char[]而不适用std::string

2 个答案:

答案 0 :(得分:0)

这是因为stricmp()不会将std::string值作为参数。

改为使用std::basic_string::compare()

std::string s ("s");
std::string s1 ("s1");

if (s.compare(s1) != 0) // or just if (s != s1)
  std::cout << s << " is not " << s1 << std::endl;

如果您需要不区分大小写的比较,则需要创建自己的函数,可能使用this example中的std::tolower(),或this other example中的boost::iequals()

答案 1 :(得分:0)

在比较之前,您可能需要考虑将字符串转换为全部大写或全部小写:

std::string s1;
std::string s2;
std::cin >> s1 >> s2;
std::transform(s1.begin(), s1.end(),
               s1.begin(),
               std::tolower);
std::transform(s2.begin(), s2.end(),
               s2.begin(),
               std::tolower);
if (s1 == s2)
{
  std::cout << "s1 and s2 are case insensitive equal.\n";
}
else
{
  std::cout << "s1 and s2 are different.\n";
}