关于比较字符串与字符串

Posted

技术标签:

【中文标题】关于比较字符串与字符串【英文标题】:About Comparing String With String 【发布时间】:2009-03-05 06:51:08 【问题描述】:

我尝试在字符串类型下逐个字符进行比较, 使用以下代码:

vector <int> getQuality(string seedTag, vector <string> &MuTag)  

    vector <int> Quals;  

     for (unsigned i = 0; i<MuTag.size(); i++)  
         Quals.push_back(-40);
         cout << MuTag[i] << " " << seedTag[i] << endl;

         if (MuTag[i] == seedTag[i])  // This line 33 with error
           Quals.push_back(40);
         


     

     return Quals;

但是为什么会出现这样的错误:

 Mycode.cc:33: error: no match for 'operator==' in '(+ MuTag)->std::vector<_Tp, _Alloc>::operator[] [with _Tp = std::string, _Alloc = std::allocator<std::string>](((long unsigned int)i)) == seedTag. std::basic_string<_CharT, _Traits, _Alloc>::operator[] [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>](((long unsigned int)i)

我该如何解决?

【问题讨论】:

【参考方案1】:

您正在尝试将字符串 (MuTag[i]) 与字符 (seedTag[i]) 进行比较。

【讨论】:

【参考方案2】:

正如亚历山大所说,您正在比较一个字符串和一个字符。

可悲的是编译器已经告诉你了,只是它用 ISO-STL-TEMPLATE 加密来加密,perl 更难阅读!

您可能希望查看this script 以解密 C++ STL 错误消息。

【讨论】:

【参考方案3】:

我知道很多其他人已经对导致编译错误的原因做出了回应,所以让我回顾一下然后提出解决方案:

seedTag 是一个字符串,根据定义,它是一个有序的字符集合。 MuTag 被定义为一个字符串向量:一个有序的字符串集合。

当您进行比较时:

MuTag[i] == seedTag[i]

正如其他人所说,您不是在比较同一类型。

修复它:

从表面上看,您希望将 MuTag 中的每个值与 seedTag 进行比较。如果确实如此,只需去掉 "seedTag[i]" 中的 [i]。

【讨论】:

【参考方案4】:
vector <string> & MuTag

是字符串的集合,而

string seedTag

是字符的集合。所以在你的比较中

MuTag[i] == seedTag[i]

你实际上是在比较这样的东西

 "aaaaa" == 'a'

这绝对是不正确的。

【讨论】:

以上是关于关于比较字符串与字符串的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法各种字符串Hash函数比较

JS 字符串比较"=="与"==="区别

JAVA 字符串比较: equals() 与 ==

C ++将字符串的索引与另一个字符串进行比较?

如果将字符串与整数进行比较,它会评估为false吗?

关于Oracle中的字符的比较