我想解析两个字符串向量,找到彼此匹配的字符串和不匹配的字符串。
我想要的例子:
输入向量1看起来像:[string1,string2,string3]
输入向量2看起来像:[string2,string3,string4]
理想输出:
string1:不匹配
string2:匹配
string3:匹配
string4:没有匹配
目前我使用此代码:
vector<string> function(vector<string> sequences, vector<string> second_sequences){
for(vector<string>::size_type i = 0; i != sequences.size(); i++) {
for(vector<string>::size_type j = 0; j != second_sequences.size(); j++){
if (sequences[i] == second_sequences[j]){
cout << "Match: " << sequences[i];
}else{
cout << "No Match: " << sequences[i];
cout << "No Match: " << second_sequences[j];
}
}
}
}
对于那些匹配的东西很有效,但是对所有东西进行了多次迭代,
和那些不匹配的内容会被多次打印。
如何改善这一点?
答案 0 :(得分:1)
最好的代码是您不必编写的代码。
如果您使用(STL)地图容器,它会照顾您排序和记忆您遇到的不同字符串。
所以让容器为我们工作。
我建议快速编写一个小代码。您需要此语法才能至少启用编译器的C ++ 2011选项(例如,在gcc上为-std = c ++ 11)。在C ++ 11之前应该使用的语法要冗长得多(但应该从学者的角度来看)。
你只有一个循环。 这只是你的一个提示(我的代码没有考虑到在第二个向量中string4可以出现多次,但我让你根据你的确切需要安排它)
#include <iostream>
#include <vector>
#include <string>
#include <map>
using namespace std;
vector<string> v1 { "string1","string2","string3"};
vector<string> v2 { "string2","string3","string4"};
//ordered map will take care of "alphabetical" ordering
//The key are the strings
//the value is a counter ( or could be any object of your own
//containing more information )
map<string,int> my_map;
int main()
{
cout << "Hello world!" << endl;
//The first vector feeds the map before comparison with
//The second vector
for ( const auto & cstr_ref:v1)
my_map[cstr_ref] = 0;
//We will look into the second vector ( it could also be the third,
//the fourth... )
for ( const auto & cstr_ref:v2)
{
auto iterpair = my_map.equal_range(cstr_ref);
if ( my_map.end() != iterpair.first )
{
//if the element already exist we increment the counter
iterpair.first->second += 1;
}
else
{
//otherwise we put the string inside the map
my_map[cstr_ref] = 0;
}
}
for ( const auto & map_iter: my_map)
{
if ( 0 < map_iter.second )
{
cout << "Match :";
}
else
{
cout << "No Match :" ;
}
cout << map_iter.first << endl;
}
return 0;
}
输出:
No Match :string1
Match :string2
Match :string3
No Match :string4
答案 1 :(得分:0)
<div class="main-img">
<img src="http://via.placeholder.com/140x140.png" alt="main image" />
</div>