'How to compare elements of a vector against each other? C++

I am supposed to read some data (specifically string datatype) and store each element in a vector. Now I have to check if any of the different strings that were inputted match in size, and if they do I have to see if there are any matching letters. Now my question is how do I compare what's inside the vector (first the size and then the different letters). Is it possible? Say I have HELLO and HELLA They have the same size, and 4 letters that match. This is what I am trying to accomplish. The code that I have does not work given my ignorance about the matter. Thank you in advance.

vector <string> myVector;

//insert data insdide of the vector

myVector.push_back("Hello");
myVector.push_back("Hello");
myVector.push_back("Hello2");
myVector.push_back("Hello3");
myVector.push_back("Hello4");



//This is wrong 

for (unsigned int i = 0; i < myVector.size(); i++) {

    if (myVector[i].size == myVector[i+1].size()){
        cout << "SAME SIZE" << endl;
}

}



return 0;


Solution 1:[1]

You just have make a simple mistake for size() function and you are trying to access the element which is not present by using i+1 for last iteration. So just change your for loop just as below

for (unsigned int i = 1; i < myVector.size(); i++) 
{
    if (myVector[i].size() == myVector[i-1].size()) // .size() should be used
    {
        cout << "SAME SIZE" << endl;
    }
}

Solution 2:[2]

Here's a way of writing it:

// returns true if @param s1 and @param s2 are equal in letters
bool isEqual(const string& s1, const string& s2) {
   if(s1.size() != s2.size())
       return false;
   bool equal = false;
    // iterates over all the characters in s1  and s2 and compare them
    for(auto ch1 = s1.cbegin(), ch2 = s2.cbegin(); ch1 != s1.cend(),ch2!= s2.cend(); ch1++, ch2++) {
        if(*ch1 == *ch2)
           equal = true;
        else
           return false;
    }
    return equal;
}

// type of iter is vector<string>::const_iterator meaning it can only read the value
    for (auto iter = myVector.cbegin(); iter != myVector.cend() - 1; iter++){
       if(isEqual(*iter, *(iter + 1)))
          std::cout << *iter << " equal " << *(iter + 1) << endl;
       else
          std::cout << *iter << " different " << *(iter + 1) << endl;
    }

Here, I used iterators(you should write code in modern C++, avoid using subscript).

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 S_Madankar
Solution 2