0

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

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

6 回答 6

5

str[4]是一种char类型,不会与 a 比较string

比较苹果和苹果。

利用

test[0] == str[4]

反而。

于 2013-09-13T20:36:55.733 回答
2

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

if (test == string(1, str[4])) {
于 2013-09-13T20:38:50.553 回答
1

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

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

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

于 2013-09-13T20:37:56.807 回答
1

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

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

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

于 2013-09-13T20:40:56.337 回答
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;
}
于 2013-09-13T20:50:21.727 回答
0

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

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

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

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;
}
于 2013-09-13T20:39:01.577 回答