String == a other string

Apr 27, 2013 at 8:07am
I have been trying for hours to find out whats wrong with this code but i cannot find it.
This code prints "No match" every time, even if string is the same as besmString.

1
2
3
4
5
6
7
8
9
10
11
12
  int main()
{
	char string[10];  
	char besmString[10]= "besm";
	cin.getline(string,10);

	if(string==besmString)
		cout << "Match";
	else
		cout << "No match";
}
Apr 27, 2013 at 8:12am
if you want a string then why use a char array? just use string instead
ex:
1
2
3
4
5
6
std::string str, besmStr = "besm";
std::getline(std::cin, str);
if(string == besmStr) //you could also do if(string == "besm") since you are setting the string to besm
std::cout << "Match." << std::endl;
else
std::cout << "No match." << std::endl;
Last edited on Apr 27, 2013 at 8:28am
Apr 27, 2013 at 8:13am
What about the strcmp(); function?

Aceix.
Apr 27, 2013 at 8:17am
i try ed it with your code but it wont compile
Apr 27, 2013 at 8:20am
@giblit
I think the string's name should be "string" not "str" at declaration(first line).

Thanks,
Aceix.
Apr 27, 2013 at 8:23am
@ Besm Osman: std::string is a data type from the C++ library, so please don't name your variables "string".

I have been trying for hours to find out whats wrong with this code but i cannot find it.
This code prints "No match" every time, even if string is the same as besmString.

In your case, you work with character arrays. Arrays decay to pointers, so when you do

if (string == besmString)

you compare the memory address of the first element of the string variable to the memory address of the first element of the beamString variable, and this is pretty much always false.

As giblit suggested, use the std::string type instead of char[]. That type supports "proper" comparison of contents with the == operator.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>

int main()
{
    std::string s1;
    std::string s2("besm");

    std::getline(std::cin, s1);

    if (s1 == s2)
        std::clog << "Match.\n";
    else
        std::clog << "No match.\n";
}
Apr 27, 2013 at 8:23am
@Aceix
I changed the str into string but the code still wont compile.

Error 2 error C3861: 'getline': identifier not found
Error 3 error C2678: binary '==' : no operator found which takes a left-hand
Error 1 error C2039: 'getline' : is not a member of 'std'
Apr 27, 2013 at 8:27am
@catfish4
thank you,
I finally understand it the code works flawlessly.
Apr 27, 2013 at 8:30am
yeah sorry I meant to do std::getline(std::cin, str) and not std::getline(std::cin, string) was looking at your code and didn't realize I typed string instead of str =p
Topic archived. No new replies allowed.