It's unusual for a language to not have an add operation. I'd think that is one of the fundamental operations that almost any language is likely to have implemented. However, if you want to consider the add operation to be slow and to be avoided, then perhaps that's reason enough to come up with another method. So I guess that means you can't count the length of the string since that involves adding 1 to a counter for each character.
In binary, all even numbers have 0 for the least significant bit, and 1 for odd. For example, 3 is binary 11 and 4 is binary 100, and the right-most digit represents whether it is a multiple of 2 (it is odd or even). If you compare that bit for two numbers, the difference between the two will be odd if the bits are different and even if they are the same. For example, the right-most bits for 3 and 4 are different, so the difference is odd.
If you are able to know the addresses in memory of the start and end of the string, you might be able to compare those addresses using bitwise operations. The bitwise AND operation will return only those bits that are set for both numbers. If you just want the least significant bit, you use AND 1 and every bit other than the one that matches 1 will be set to zero, and the least significant (right-most) bit will be set according to whether the original number's bit is a 1 or a 0. The bitwise XOR operation will return a 1 for bits that are different, and 0 for bits that are the same.
So, using those in an example, if a string starts at address 5 and ends at address 9, you can use bitwise AND (not logical AND) to get you only their least significat bit, then bitwise XOR to compare those bits. 5 AND 1 is 1, 9 AND 1 is 1, 1 XOR 1 is 0, so the difference is even. If we try addresses 42 and 57, 42 AND 1 is 0, 57 AND 1 is 1, 0 XOR 1 is 1, so the difference is odd.
An example of how to do this in C++ from two pointers might be something like the following, though I don't know if it allows you to work with pointers like this:
char *start, *end; // pointers
// set them to be start and end of string
// respectively, then test them:
if( ((start&1)^(end&1))==0 )
{ cout << "even!\n"; }
else
{ cout << "odd!\n"; }
However, if you can find the "length" of the string as all the above answers assume, you can still use bitwise operations on the length. In fact, all you'd need is bitwise AND, and it tends to be more efficient in hardware than a divide (modulo) operation:
if( (length&1)==0 ) cout << "even!\n";
else cout << "odd!\n";