The following string of mine tried to find difference between two strings. But it’s horribly slow as it iterate the length of string:
#include <string> #include <vector> #include <iostream> using namespace std; int hd(string s1, string s2) { // hd stands for 'Hamming Distance' int dif = 0; for (unsigned i = 0; i < s1.size(); i++ ) { string b1 = s1.substr(i,1); string b2 = s2.substr(i,1); if (b1 != b2) { dif++; } } return dif; } int main() { string string1 = 'AAAAA'; string string2 = 'ATATT'; string string3 = 'AAAAA'; int theHD12 = hd(string1,string2); cout << theHD12 << endl; int theHD13 = hd(string1,string3); cout << theHD13 << endl; }
Is there a fast alternative to do that? In Perl we can have the following approach:
sub hd { return ($_[0] ^ $_[1]) =~ tr/\001-\255//; }
which is much2 faster than iterating the position.
I wonder what’s the equivalent of it in C++?
Fun with the STL: