By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,567 Members | 1,056 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,567 IT Pros & Developers. It's quick & easy.

Comparing two strings with arrays and pointers

P: n/a
First off, I know arrays can't be compared directly (ie: if (arrary1
== array2)). However, I've been trying to compare two arrays using
pointers with no success. Basically, I want to take three sets of
character strings from the user. Then I want to run through each
element and compare the two strings. If they match I print they
match... I'm having a bit of trouble with the actual loop through each
array using the pointers and comparing the characters.

Here's what I have so far... Thanks for any tips you can provide!

__________________________________________________ ____
#include <iostream>

using std::cout;
using std::cin;
using std::endl;

int main() {

char s[10]; //array 1
char *sPtr; //pointer 1

char ss[10]; //array 2
char *ssPtr; //pointer 2

for (int c=1; c<=3; c++) { //looping 3 times

cout << "Enter first string of 10 characters:";
cin >> s;

cout << "Enter second string of 10 characters:";
cin >> ss;

for (int i=0; i<10; ++i) { //loop through each element

if ( *sPtr[i] == *ssPtr[i] ) { //here's the problem...

cout << "The entered strings are equal.\n\n";

}

else if (s[i] != ss[i]) {

cout << "The entered strings are not equal.\n";

}

}
}

return 0;

}
Jul 22 '05 #1
Share this Question
Share on Google+
4 Replies


P: n/a
agent349 wrote:
First off, I know arrays can't be compared directly (ie: if (arrary1
== array2)). However, I've been trying to compare two arrays using
pointers with no success. Basically, I want to take three sets of
character strings from the user. Then I want to run through each
element and compare the two strings. If they match I print they
match... I'm having a bit of trouble with the actual loop through each
array using the pointers and comparing the characters.

Here's what I have so far... Thanks for any tips you can provide!

__________________________________________________ ____
#include <iostream>

using std::cout;
using std::cin;
using std::endl;

int main() {

char s[10]; //array 1
char *sPtr; //pointer 1

char ss[10]; //array 2
char *ssPtr; //pointer 2

for (int c=1; c<=3; c++) { //looping 3 times

cout << "Enter first string of 10 characters:";
cin >> s;

cout << "Enter second string of 10 characters:";
cin >> ss;

for (int i=0; i<10; ++i) { //loop through each element

if ( *sPtr[i] == *ssPtr[i] ) { //here's the problem...
use

if ( s[i] == ss[i] ) {

and it will compile. However, it will not do what you want.

cout << "The entered strings are equal.\n\n";

}

else if (s[i] != ss[i]) {

cout << "The entered strings are not equal.\n";

}

}
}

return 0;

}

There are the following problems with your code:

a) The pointers sPtr and ssPtr are not initialized. It would be pure
conicidence if sPtr pointed to the beginning of s. Likewise for ssPtr.

b) During your for loop every instace of s[i]==ss[i] will be announced
as a matching of the strings. Every single s[i] != ss[i] will be
(correctly) claimed to prove the two strings unequal.

c) the strings are compared beyond their ends. If the user does not
input exaclty 10 letters, the results will depend on uninitialized memory.
One correct way to compare two arrays of length 10 is the following idiom:

bool is_equal ( true );
for ( i = 0; i < 10; ++i ) {
if ( s[i] != s[ii] ) {
is_equal = false;
break;
}
}
// now is_equal is true if and only if s[i]==ss[i] for all i < 10.
But you really want to compare strings. Thus, let me suggest:

#include <iostream>
#include <string>

using std::cout;
using std::cin;
using std::endl;
using std::string;

int main() {

string s;
string ss;

for (int c=1; c<=3; c++) { //looping 3 times

cout << "Enter first string:";
cin >> s;

cout << "Enter second string:";
cin >> ss;

if ( s == ss ) {
cout << "The entered strings are equal.\n";
} else {
cout << "The entered strings are not equal.\n";
}
}
return 0;
}

If you want to insist on the strings not exceeding 10 characters, you
can check for that after input with s.length() and ss.length().
Jul 22 '05 #2

P: n/a
Ian
agent349 wrote:
First off, I know arrays can't be compared directly (ie: if (arrary1
== array2)). However, I've been trying to compare two arrays using
pointers with no success. Basically, I want to take three sets of
character strings from the user. Then I want to run through each
element and compare the two strings. If they match I print they
match... I'm having a bit of trouble with the actual loop through each
array using the pointers and comparing the characters.

Here's what I have so far... Thanks for any tips you can provide!

__________________________________________________ ____
#include <iostream>

using std::cout;
using std::cin;
using std::endl;

int main() {

char s[10]; //array 1
char *sPtr; //pointer 1

char ss[10]; //array 2
char *ssPtr; //pointer 2
May as well make pointers const char*.
for (int c=1; c<=3; c++) { //looping 3 times

cout << "Enter first string of 10 characters:";
cin >> s;

cout << "Enter second string of 10 characters:";
cin >> ss;
Pointers should be assigned here.
for (int i=0; i<10; ++i) { //loop through each element

if ( *sPtr[i] == *ssPtr[i] ) { //here's the problem...
should read *sPtr++ == *ssPtr++ - no indexing!
cout << "The entered strings are equal.\n\n";

}

else if (s[i] != ss[i]) {
Eh?
cout << "The entered strings are not equal.\n";
You should compare until you reach the end of a string, or a difference
before printing anything. }

}
}

return 0;

}


Why not use std::string and save yourself a lot of arse ache?

Ian
Jul 22 '05 #3

P: n/a
Here's what I came up with...seems to do what I need. Thanks for the help!

-------------------------------------------------
#include <iostream>
using std::cout;
using std::cin;
using std::endl;

int main() {

//declare first array
char s[10];
//declare second array
char ss[10];

//loop 3 times
for (int c=1; c<=3; c++) {

cout << "Enter first string:";
cin >> s;

cout << "Enter second string:";
cin >> ss;

bool is_equal ( true );
for (int i = 0; i < 10; ++i ) {
if ( s[i] != ss[i] ) {
is_equal = false;
cout << "The entered strings are not equal.\n";
break;
}
else { cout << "The entered strings are equal.\n"; break; }
}

}

return 0;

}
Jul 22 '05 #4

P: n/a
ag******@yahoo.com (agent349) wrote in message news:<e2**************************@posting.google. com>...
Here's what I came up with...seems to do what I need. Thanks for the help!

-------------------------------------------------
#include <iostream>
using std::cout;
using std::cin;
using std::endl;

int main() {

//declare first array
char s[10];
//declare second array
char ss[10];

//loop 3 times
for (int c=1; c<=3; c++) {

cout << "Enter first string:";
cin >> s;

cout << "Enter second string:";
cin >> ss;

bool is_equal ( true );
for (int i = 0; i < 10; ++i ) {
if ( s[i] != ss[i] ) {
is_equal = false;
cout << "The entered strings are not equal.\n";
break;
}
else { cout << "The entered strings are equal.\n"; break; }
}

}

return 0;

}


If you want strings of precisely 10 characters, you need to use
s[11] and ss[11] rather than 10 at both places to account for
the '\0' character.
Jul 22 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.