繁体   English   中英

C ++比较一个字符串的索引和另一个字符串?

[英]C++ comparing the index of a string to another string?

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

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

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

比较苹果与苹果。

采用

test[0] == str[4]

代替。

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

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

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

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

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

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

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

然而,由于这仅仅是一个例子,而不是真正,真正的问题,你会想要做的是看功能std::string类用品

另外,如果要像这样进行比较,则需要将"D"作为字符值而不是字符串值。

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

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

str.at(i);

您也可以写成

str[i] <-您做了什么。

本质上,这一切都归结为测试需要像char test = 'D';一样初始化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;
}

我认为您可能正在将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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM