如何比较两个大小不同的字符串

时间:2019-07-14 02:38:00

标签: c++ string char compare string-comparison

让我们只说字符串+00:00,字符串A = "ABCDEF"

有没有一种方法可以逐个字符地比较这两个字符串?

例如: 假设您要遍历每个字符串,

B = "ABC"

您不能在for循环中这样做,因为它们的大小不同,还有其他建议吗?

3 个答案:

答案 0 :(得分:1)

  

您无法在for循环中这样做,因为它们的大小不同,

您绝对可以循环进行。您可以使用以下算法:

  • 比较字符串的长度
  • 将较短的长度存储在n
  • 循环执行n个迭代
  • 确定其余长字符串要做什么

答案 1 :(得分:0)

您还可以查看类似std::lexogrphical_compare的内容。它用于对单词进行排序,就像在字典中对单词进行排序一样。如果要确保字符本身以不同的顺序排序,则可以提供一个进行比较的函数。例如,假设您希望字母'c'实际上被排序为'k'。您可以通过以下方式完成此操作:

bool comp(char c1, char c2)
{
  c1 = std::tolower(c1);
  c2 = std::tolower(c2);
  c1 = (c1=='c') ? 'k' : c1;
  c2 = (c2=='c') ? 'k' : c2;
  return c1 < c2;
}

// main.cpp
std::string str1 = "string c";
std::string str2 = "string d";
std::string str3 = "string k";

std::cout << std::boolalpha;
std::cout << str1 << ( std::lexographical_compare(str1, str2, comp) ? "<" : ">=" ) << str2 << std::endl;
std::cout << str1 << ( std::lexographical_compare(str1, str3, comp) ? "<" : ">=" ) << str3 << std::endl;
std::cout << str2 << ( std::lexographical_compare(str2, str3, comp) ? "<" : ">=" ) << str3 << std::endl;

答案 2 :(得分:0)

如果您使用std :: string进行比较,则可以使用compare函数或使用此类附带的关系运算符。

std::string str1 ("green apple");
std::string str2 ("red apple");

if (str1.compare(str2) != 0)
  std::cout << str1 << " is not " << str2 << '\n';

if (str1 != str2) std::cout << "str1 and str2 are not equal\n";

所有其他关系运算符,即== <> <=> =也可用。看来您只需要==中的!=

如果您坚持要逐个字符比较字符串,那么可以通过几种方式循环执行。例如,

bool equal = true;
if (str1.length() != str2.length())
     equal = false;
else 
     for (int i = 0; equal && i < str1.length(); i++) 
        if (str1.at(i) != str2.at(i) 
           equal = false;