[nfbcs] C++ question

Joseph C. Lininger devnull-nfbcs at pcdesk.net
Mon Nov 12 04:03:54 UTC 2018


I originally didn't copy the list, but I decided this might be useful 
for everyone. So, here's my response to this message.


What you'll want depends on whether or not you're using the older style 
C strings or the newer C++ style string objects. I'm assuming, because 
you said C++, that it's string objects you're using. In that case, first 
make sure you have #included the string header, like this:

#include <string>

You would have had to do that anyway to make the string object 
available, but figured I'd mention it anyway. While you're at the top of 
your file, also make sure you have this line. You'll need it for the 
transformation I'm going to show you.

#include <algorithm>

Finally, make sure you have:

using namespace std;

Now, for the case conversion. This problem is, unfortunately, harder 
than it should be. You have two choices.

1. Apply a transformation to the String, whereby you use the transform() 
function in conjunction with the old C toupper() function to convert 
each character to uppercase. (You have to use the old C toupper, not the 
one from C++, which I'll show you how to do.)

2. Convert the C++ string to a traditional C null-terminated string 
(char * if you're a C guy), then use strupper to convert that to upper 
case. Be careful with memory locations and such if you elect to do this.

I'll show how to do it using option 1 since that doesn't require you 
ever convert the String object to something else. Assuming you have a 
string called theString, you would write a line like this to convert it 
to uppercase using transform().

transform(theString.begin(), theString.end(), theString.begin(), 
::toupper);

Here's a sample program that reads a string, then converts to uppercase 
and displays it. I actually compiled and ran this, so I know it works at 
least on my setup.

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main()
{
     string theString;
     cout << "Enter a string: ";
     cin >> theString;
     // The magic is the next line
    transform(theString.begin(), theString.end(), theString.begin(), 
::toupper);
     cout << "The string is: " << theString << "\n";
}

Hope this helps.
Joe

On 11/11/2018 20:19, gwunder--- via nfbcs wrote:
> My grandson has asked for his grandfather's help, and although I have not
> coded in C++, so far I've been able to help. We are stumped by the need to
> convert a string to one case. It matters not at all to us if that is upper
> or lower case. We need to see if a string read forward or backward is the
> same-a palindrome. Though we find a function called toupper, we do not find
> the library in which it resides. It appears not to work on more than one
> character at a time.
>
>   
>
> So if any of you can write me off list, how do we convert a string to one
> case?
>
>   
>
> Thank you.
>
>   
>
>   
>
> _______________________________________________
> nfbcs mailing list
> nfbcs at nfbnet.org
> http://nfbnet.org/mailman/listinfo/nfbcs_nfbnet.org
> To unsubscribe, change your list options or get your account info for nfbcs:
> http://nfbnet.org/mailman/options/nfbcs_nfbnet.org/devnull-nfbcs%40pcdesk.net




More information about the NFBCS mailing list