DaniWeb IT Discussion Community

DaniWeb IT Discussion Community (http://www.daniweb.com/forums/index.php)
-   C++ (http://www.daniweb.com/forums/forum8.html)
-   -   How does one tolower an entire string? (http://www.daniweb.com/forums/thread57296.html)

FireSBurnsmuP Oct 6th, 2006 10:01 pm
How does one tolower an entire string?
 
You see, I am writing a program that uses strings for input to determine things, and I don't want it to be case sensitive.

So, I know you can go through a string and go char by char to store each char, tolower()'d into another string while in a for loop, but I don't know how to get the string's length or how to get char positions in strings anymore (it's been a while).

Any help is appreciated!

Inanna Oct 6th, 2006 10:30 pm
Re: How does one tolower an entire string?
 
kk, if this is C then you use a test against '\0' to look for the end and do sumthin' like this.
int i;

for (i = 0; str[i] != '\0'; i++)
    str[i] = (char)tolower(str[i]);
One of the few things a cutie like me is anal about is avoiding pointers when they aren't needed. Employers like to think that this is a better solution. I haven't figured out why yet.
char *p;

for (p = str; *p != '\0'; p++)
    *p = (char)tolower(*p);
In fact, at my last interview, the dude's insistence on using pointers for something stupid was the deal breaker for an otherwise sweet gig. That's how silly I am about it. ;)

But! Back to the present, the first loopy makes it clear that you're working with a string. Not just a string, a string that lives in an array. In other words, you can change it! If it's a pointer, you jus' can't be sure, can ya? Sure, sure, if it's a function parameter then the point is moot because you've got a pointer whether you like it or not. But at the very least, the array notation is a cool little mnemonic for those of us that just aren't that bright. Words of wisdom (ha!) from a grunt in the trenches, yo.
void StrLower(char str[])
{
    int i;

    for (i = 0; str[i] != '\0'; i++)
        str[i] = (char)tolower(str[i]);
}
If this is C++ then you've got options. And do I mean options! It's not C++ if you don't complicate the world, right?
struct Lowey {
    int operator()(int c)
    {
        return std::tolower(c);
    }
};

std::transform(str.begin(), str.end(), str.begin(), Lowey());
transform comes from the algorithm header, and tolower is in cctype. You can also use tolower directly, but it's troublesome.
std::transform(str.begin(), str.end(), str.begin(), std::tolower);
The biggest trouble is that both iostream and cctype declare a tolower, and there'd be an ambigimuity. :p But people look at me funny if I don't abusively use the STL in my C++ codage. Hmm, then again, they may look at me funny because I do...

FireSBurnsmuP Oct 7th, 2006 2:15 am
Re: How does one tolower an entire string?
 
Oh yeah, this is C++, btw, sorry not to mention that.

I didn't know about the ambiguity with cctype and iostream, that's interesting...

And I was planning on using something similar to your first C example in this case, but I was going to have a get char type thing that would store into a temp string, but I guess I forgot how to get the length of a string.

So, how do I get the length of a string in C++?

GloriousEremite Oct 7th, 2006 3:18 am
Re: How does one tolower an entire string?
 
Do you mean the length of a c-style string (char array) or the length of a std::string? You could use strlen for the former, and the length() member function for the latter

WaltP Oct 7th, 2006 7:11 am
Re: How does one tolower an entire string?
 
Quote:

Originally Posted by FireSBurnsmuP (Post 260924)
So, how do I get the length of a string in C++?

stringvariable.length()

Ene Uran Oct 7th, 2006 5:12 pm
Re: How does one tolower an entire string?
 
Here is a mildly more modern way:
// convert string to all lower case

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

using namespace std;

int lower_case ( int c )
{
  return tolower ( c );
}

int main()
{
  string s = "THIS IS A TEST";

  transform( s.begin(), s.end(), s.begin(), lower_case );
  cout << s << endl;
}
I know you are looking also at Python:
str1 = "THIS IS A TEST"
str2 = str1.lower()
print str2
Or as a one-liner:
print "THIS IS A TEST".lower()

FireSBurnsmuP Oct 8th, 2006 9:27 pm
Re: How does one tolower an entire string?
 
Alrighty, got the function written, thanks!

geinjo Oct 18th, 2009 1:51 am
std::transform(str.begin(), str.end(), str.begin(), ::tolower);

this is the solution, note the lack of std before ::tolower.


All times are GMT -4. The time now is 4:28 pm.

Forum system based on vBulletin Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2003 - 2009 DaniWeb® LLC