944,028 Members | Top Members by Rank

Ad:
  • C++ Discussion Thread
  • Marked Solved
  • Views: 15067
  • C++ RSS
Oct 6th, 2006
0

How does one tolower an entire string?

Expand Post »
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!
Similar Threads
Reputation Points: 46
Solved Threads: 2
Posting Whiz in Training
FireSBurnsmuP is offline Offline
237 posts
since Sep 2006
Oct 6th, 2006
0

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.
C++ Syntax (Toggle Plain Text)
  1. int i;
  2.  
  3. for (i = 0; str[i] != '\0'; i++)
  4. 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.
C++ Syntax (Toggle Plain Text)
  1. char *p;
  2.  
  3. for (p = str; *p != '\0'; p++)
  4. *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.
C++ Syntax (Toggle Plain Text)
  1. void StrLower(char str[])
  2. {
  3. int i;
  4.  
  5. for (i = 0; str[i] != '\0'; i++)
  6. str[i] = (char)tolower(str[i]);
  7. }
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?
C++ Syntax (Toggle Plain Text)
  1. struct Lowey {
  2. int operator()(int c)
  3. {
  4. return std::tolower(c);
  5. }
  6. };
  7.  
  8. 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.
C++ Syntax (Toggle Plain Text)
  1. 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...
Reputation Points: 53
Solved Threads: 6
Junior Poster in Training
Inanna is offline Offline
90 posts
since Sep 2006
Oct 7th, 2006
0

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++?
Last edited by FireSBurnsmuP; Oct 7th, 2006 at 2:15 am.
Reputation Points: 46
Solved Threads: 2
Posting Whiz in Training
FireSBurnsmuP is offline Offline
237 posts
since Sep 2006
Oct 7th, 2006
0

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
Last edited by GloriousEremite; Oct 7th, 2006 at 3:18 am.
Reputation Points: 108
Solved Threads: 14
Junior Poster in Training
GloriousEremite is offline Offline
65 posts
since Jul 2006
Oct 7th, 2006
0

Re: How does one tolower an entire string?

So, how do I get the length of a string in C++?
stringvariable.length()
Moderator
Reputation Points: 3278
Solved Threads: 894
Posting Sage
WaltP is offline Offline
7,747 posts
since May 2006
Oct 7th, 2006
0

Re: How does one tolower an entire string?

Here is a mildly more modern way:
C++ Syntax (Toggle Plain Text)
  1. // convert string to all lower case
  2.  
  3. #include <algorithm>
  4. #include <cctype>
  5. #include <iostream>
  6. #include <string>
  7.  
  8. using namespace std;
  9.  
  10. int lower_case ( int c )
  11. {
  12. return tolower ( c );
  13. }
  14.  
  15. int main()
  16. {
  17. string s = "THIS IS A TEST";
  18.  
  19. transform( s.begin(), s.end(), s.begin(), lower_case );
  20. cout << s << endl;
  21. }
I know you are looking also at Python:
C++ Syntax (Toggle Plain Text)
  1. str1 = "THIS IS A TEST"
  2. str2 = str1.lower()
  3. print str2
Or as a one-liner:
C++ Syntax (Toggle Plain Text)
  1. print "THIS IS A TEST".lower()
Last edited by Ene Uran; Oct 7th, 2006 at 5:16 pm.
Reputation Points: 625
Solved Threads: 211
Posting Virtuoso
Ene Uran is offline Offline
1,704 posts
since Aug 2005
Oct 8th, 2006
0

Re: How does one tolower an entire string?

Alrighty, got the function written, thanks!
Reputation Points: 46
Solved Threads: 2
Posting Whiz in Training
FireSBurnsmuP is offline Offline
237 posts
since Sep 2006
Oct 18th, 2009
0
Re: How does one tolower an entire string?
std::transform(str.begin(), str.end(), str.begin(), ::tolower);

this is the solution, note the lack of std before ::tolower.
Reputation Points: 10
Solved Threads: 0
Newbie Poster
geinjo is offline Offline
1 posts
since Oct 2009

This thread is solved

Either the thread starter or a moderator has marked this thread as solved. You can most likely trust the responses and answers given. There is most likely no reason for any further responses to be posted here. If you have a related question, please start a new thread in this forum instead.

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in C++ Forum Timeline: homework
Next Thread in C++ Forum Timeline: Input files with multiple columns





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC