C++ comparing the index of a string to another str

2019-08-21 10:41发布

How can I compare a single character from a string, and another string (which may or may not be greater than one character)

This program gives me almost 300 lines of random errors. The errors don't reference a specific line number either, just a lot of stuff about "char* ", "", or "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条回答
兄弟一词,经得起流年.
2楼-- · 2019-08-21 11:03

You need to convert str[4] (which is a char) to a string before you can compare it to another string. Here's a simple way to do this

if (test == string(1, str[4])) {
查看更多
戒情不戒烟
3楼-- · 2019-08-21 11:13

You're mixing types. It doesn't know how to compare a string (test) to a char (str[4]).

If you change test to a char that will work fine. Or reference the specific character within test you want to compare such as if (test[0] == str[4]) it should compile and run.

However, as this is merely an example and not really the true question what you'll want to do is look at the functionality that the std::string class supplies

查看更多
我命由我不由天
4楼-- · 2019-08-21 11:13

I think you might be mixing python with c++. In c++ 'g' refers to a single character g not a string of length 1. "g" refers to an array (string) which is 1 character long and looks like ['g']. So as you can see, if you compare a single character to an array of characters no matter if the array is a single character long, this operation is not defined.

This will work if define it yourself by building a class which is able to compare string of one character long to a single character. Or just overload the == operator for doing just that

Example:

#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;
}
查看更多
够拽才男人
5楼-- · 2019-08-21 11:19

Also you need "D" to be a char value not a string value if you are comparing it like that.

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

You have to turn it into a char array before can access it. Unless you do.

str.at(i);

which you can also write as

str[i] <-- what you did.

Essentially, this all boils down to test needs to initialized like char test = 'D';

Final Output..

#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楼-- · 2019-08-21 11:24

You're comparing a char to a std::string, this is not a valid comparison. You're looking for std::string::find, as follows:

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

Note that this will return true if test contains str[4].

查看更多
够拽才男人
7楼-- · 2019-08-21 11:27

str[4] is a char type, which will not compare with a string.

Compare apples with apples.

Use

test[0] == str[4]

instead.

查看更多
登录 后发表回答