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

2019-08-21 11:15发布

问题:

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;
}

回答1:

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])) {


回答2:

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

Compare apples with apples.

Use

test[0] == str[4]

instead.



回答3:

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].



回答4:

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



回答5:

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:

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;
}