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

Posted

技术标签:

【中文标题】C ++将字符串的索引与另一个字符串进行比较?【英文标题】:C++ comparing the index of a string to another string? 【发布时间】:2013-09-13 20:34:29 【问题描述】:

如何比较一个字符串中的单个字符和另一个字符串(可能大于也可能不大于一个字符)

这个程序给了我近 300 行随机错误。这些错误也没有引用特定的行号,只是很多关于“char*”、“”或“std::to_string”的内容。

#include <iostream>
#include <string>

using std::cout;
using std::string;

int main() 
    string str = "MDCXIV";
    string test = "D";

    if (test == str[4])      // This line causes the problems
        cout << test << endl;
    
    return 0;

【问题讨论】:

为什么不char test = 'D';?! 目前尚不清楚您是要检查测试是否“包含”str[4],还是“以”str[4]开头。 您不能将单个字符与另一个长度可能大于或不大于一个字符的字符串进行比较。这没有任何意义。为什么你会比较 'single_char'"multiple_chars"?这是 cplusplus 不是 python @Smac89 因为“Multiple_chars”包括单个字符的可能性。我可能错了,但似乎 OP 要求的是完全合理的东西。如果字符串长度为 1 且 char 等于另一个 char,他希望比较成功, @john 是的,multiple_chars 实际上只能由 single_char 组成。但是'g'['g'] 之间是有区别的 【参考方案1】:

str[4]char 类型,不会与 string 比较。

比较苹果和苹果。

使用

test[0] == str[4]

改为。

【讨论】:

因为我不相信这是 OP 正在寻找的答案。他想将字符与字符串进行比较,而不是将字符与字符串中的第一个字符进行比较。 @john 他还提到这给了他 300 行错误。 @Smac89 他大概是在夸大其词。但是有些编译器确实会在模板代码上给出冗长的错误。【参考方案2】:

您需要先将 str[4](它是一个字符)转换为字符串,然后才能将其与另一个字符串进行比较。这是一个简单的方法来做到这一点

if (test == string(1, str[4])) 

【讨论】:

请注意,测试可能是“一个或多个字符”。如果有多个字符,您的解决方案将永远不会返回 true。 @thelamb 我不能不同意你的观点,我认为这就是 OP 想要的。【参考方案3】:

您正在将 char 与 std::string 进行比较,这不是有效的比较。 你在寻找std::string::find,如下:

if( test.find( str[4] ) != std::string::npos ) cout << test << "\n";

请注意,如果测试 包含 str[4],这将返回 true。

【讨论】:

【参考方案4】:

您正在混合类型。它不知道如何将字符串 (test) 与字符 (str[4]) 进行比较。

如果您将测试更改为char,则可以正常工作。或者在测试中引用您要比较的特定字符,例如 if (test[0] == str[4]) 它应该编译并运行。

但是,由于这只是一个示例,而不是真正的问题,您想要做的是查看 std::string 类提供的 functionality

【讨论】:

【参考方案5】:

如果您像这样比较它,您还需要 "D" 是一个字符值而不是字符串值。

std::string myString = "Hello World";
const char *myStringChars = myString.c_str();

你必须先把它变成一个字符数组才能访问它。除非你这样做。

str.at(i);

你也可以这样写

str[i]

本质上,这一切都归结为测试需要像char test = 'D';一样初始化

最终输出..

#include <iostream>
#include <string>

using std::cout;
using std::string;

int main() 
    string str = "MDCXIV";
    char test = 'D';

    if (test == str[4])      // This line causes NO problems
        cout << test << endl;
    
    return 0;

【讨论】:

【参考方案6】:

我认为您可能正在将 python 与 c++ 混合使用。在 c++ 中,'g' 指的是单个字符g,而不是长度为 1 的字符串。“g”指的是一个长度为 1 个字符且看起来像 ['g'] 的数组(字符串)。如你所见,如果将单个字符与字符数组进行比较,无论数组是否为单个字符长,都没有定义此操作。

如果通过构建一个能够将一个字符长的字符串与单个字符进行比较的类自己定义它,这将起作用。或者只是重载 == 操作符来做这个

例子:

#include <iostream>
#include <string>

using std::cout;
using std::string;
using std::endl;

bool operator == ( const string &lh, const char &rh) 
    if (lh.length() == 1) return lh[0] == rh;
    return 0;


int main() 
    string str = "MDCXIV";
    string test = "D";

    if (test == str[4]) 
        cout << test << endl;
    
    else cout << "Not a match\n";
    return 0;

【讨论】:

以上是关于C ++将字符串的索引与另一个字符串进行比较?的主要内容,如果未能解决你的问题,请参考以下文章

将一个字符串与另一个字符串的多个子字符串进行比较

如何拆分字符串数组,然后将该拆分数组的每个第一个索引与字符进行比较?

用C/C++实现字符串的创建,并进行查找与替换

ruby 将哈希值转换为排序的字符串数组,以便与另一个哈希值进行比较

将一个表中的多个值与另一个表中的多个值进行比较

将字符串转换为集合以与另一个集合进行比较