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



让我们说字符串A = "ABCDEF",字符串B = "ABC"

有没有办法逐个字符比较这两个字符串?

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

 for(size of strings)
 if(A.at(i) == B.at(i)
 {
   do something
 }
 else
 {
   do something else
 }

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

你不能在 for 循环中做到这一点,因为它们的大小不同,

你绝对可以循环完成。您可以使用以下算法:

  • 比较字符串的长度
  • 将较短的长度存放在n
  • 循环n迭代
  • 决定要对较长字符串的其余部分执行的操作
你也可以

看看类似 std::lexicographical_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::lexicographical_compare(str1, str2, comp) ? "<" : ">=" ) << str2 << std::endl;
std::cout << str1 << ( std::lexicographical_compare(str1, str3, comp) ? "<" : ">=" ) << str3 << std::endl;
std::cout << str2 << ( std::lexicographical_compare(str2, str3, comp) ? "<" : ">=" ) << str3 << std::endl;

如果使用 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 equaln";

所有其他关系运算符,即 == <> <=>= 也可用。看起来在您的情况下,您只需要== !=.

如果您坚持逐个比较字符串 char,那么您可以通过多种方式在循环中执行此操作。例如

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;

相关内容

  • 没有找到相关文章

最新更新