我应该读取一些数据(特别是字符串数据类型)并将每个元素存储在向量中。现在我必须检查输入的任何不同字符串的大小是否匹配,如果匹配,我必须查看是否有任何匹配的字母。现在我的问题是如何比较向量内部的内容(首先是大小,然后是不同的字母)。是否可以? 说我有 你好 和 海拉 它们大小相同,并且有 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;
您只是在 size() 函数上犯了一个简单的错误,并且您试图通过在最后一次迭代中使用 i+1 来访问不存在的元素。 所以只需如下更改你的 for 循环
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;
}
}
这是一种写法:
// 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++编写代码,避免使用下标)。