如何比较一个向量的元素?C++

mcvgt66p  于 2023-02-06  发布在  其他
关注(0)|答案(2)|浏览(134)

我应该读一些数据(特别是字符串数据类型)并将每个元素存储在一个向量中。现在我必须检查输入的不同字符串中是否有任何字符串在大小上匹配,如果有,我得看看是否有匹配的字母,现在我的问题是如何比较向量中的内容(首先是大小,然后是不同的字母)。可能吗?说我有你好和你好,他们有相同的大小,和4个字母匹配。这是我正在努力完成的。代码,我有不工作,鉴于我对此事的无知。谢谢你提前。

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;
gupuwyp2

gupuwyp21#

你只是在size()函数上犯了一个简单的错误,你试图通过使用i+1来访问最后一次迭代中不存在的元素。

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;
    }
}
5ssjco0h

5ssjco0h2#

这里有一种写法:

// 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;
    }

在这里,我使用了迭代器(* 你应该用现代C++编写代码,避免使用下标 *)。

相关问题