比较C++中字母相同但顺序不同的字符串
Comparing strings in C++ that have the same letters but in different order
我对编程还很陌生。我需要比较两个元素完全相同但顺序不同的字符串。我尝试过使用strcmpi()
进行比较,但它不起作用。我试着使用我在网上读到的is_permutation()
,它用于比较具有相同元素的字符串,但我的编译器说它不存在,即使我包含了<algorith.h>
。我的编译器是Borland C++。有没有其他方法可以比较两个字符串,并用相同的元素将它们计算为相等,但排列顺序不同?例如CCD_ 4和CCD_。
-
您的编译器是旧的。我没有检查,但我很确定它不支持std::is_permutation所需的C++11。
-
正如评论已经指出的那样,您只需
sort
字符串,然后对它们进行比较。 -
正如评论中所指出的,你试图包含的头是非标准的/不正确的(同样可能是因为你使用了一个古老的编译器-已经有了一个现代的编译器;VS2015、GCC 6.1和Clang 3.8都可以免费获得,并且都提供了相当好的C++11/C++14支持)。
您可以计算每个字符在每个字符串上出现的次数,如果相等,则返回true。
#include <iostream>
#include <string>
using namespace std;
bool anagrams(string s, string t){
if(s.length() != t.length())
return false;
int chArr[256];
// Set character's count to 0
for(int i=0; i<256; i++)
chArr[i] = 0;
for(int i=0; i<s.length(); i++){
chArr[s[i]]++;
chArr[t[i]]--;
}
for(int i=0; i<256; i++){
if(chArr[i] != 0)
return false;
}
return true;
}
int main(){
if(anagrams("hello, olelh"))
cout << "Yes" << endl;
else
cout << "No" << endl;
return 0;
}
正如Nathan Oliver所建议的,对两者进行排序,然后检查它们是否相等。源代码是:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool AreAnagrams(string s1, string s2) {
sort(s1.begin(), s1.end());
sort(s2.begin(), s2.end());
return s1 == s2;
}
int main() {
if (AreAnagrams("evil", "vile"))
cout << "Are anagrams." << endl;
else
cout << "Are not anagrams." << endl;
return 0;
}
相关文章:
- 按字母顺序对字符串中的字母进行排序,而无需使用内置的 sort()
- 按字母顺序对C++问题中的子字符串索引进行分区
- 提高从排序字符串中获取字母顺序的顺序复杂性
- 字符串变量顺序
- 高效的字符串截断算法,按顺序删除相等的前缀和后缀
- 反转字符串中单词的位置,而不更改 O(1) 空格限制中特殊字符的顺序
- C++按字母顺序排列的字符串数组
- 如何在 c++ 中按字母顺序排列数组中的字符串?
- C++ 按数值对元组<字符串、浮点数>然后按字典顺序排序的向量
- 如何根据长度然后字母顺序对数组字符串进行排序?
- C 在向量的向量中按字母顺序排序字符串
- 将字符串值分配给Char数组以相反的顺序进行循环
- 检索字符串的第一个字符,并在C++中按字母顺序进行比较
- 将字符指针按顺序存储在 map 中 std::map<char*, int> mymap。将其存储为字符或字符串不是一个选项
- 添加字符串和文字,顺序如何影响是否可以正确添加字符串
- 我不知道如何创建一个以数字/字母顺序打印出我的整数或字符串的程序
- 按字母顺序对字符串数组进行排序C++
- 在 C++ 中使用链表按字母顺序对字符串进行排序
- 如何将整数向量转换为 2 位十六进制并按顺序添加到 c 字符串?
- 链接列表并按字母顺序插入字符串