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

时间:2013-09-13 20:34:30

标签: c++ string stdstring

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

这个程序给了我近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;
}

6 个答案:

答案 0 :(得分:5)

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

将苹果与苹果进行比较。

使用

test[0] == str[4]

代替。

答案 1 :(得分:1)

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

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

请注意,如果test 包含 str[4],则会返回true。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

你正在混合类型。它不知道如何比较字符串(test)和字符(str[4])。

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

但是,由于这仅仅是一个例子,并不是真正的问题,你要做的是查看std::string班级提供的functionality

答案 4 :(得分:0)

如果你要比较它,你还需要"D"作为char值而不是字符串值。

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

您必须先将其转换为char数组才能访问它。除非你这样做。

str.at(i);

你也可以写成

str[i]&lt; - 你做了什么。

基本上,这一切都归结为测试需要初始化为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;
}

答案 5 :(得分:0)

我认为你可能会将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;
}