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().