Original Post
Hi,
Stupid question here, but is there a builtin way to make a ToUpper function with the STL string ?
I haven''t a decent STL doc...
Thanks for any help,
Emmanuel
#include <string>
#include <algorithm>
#include <cctype>
std::transform(str.begin(), str.end(), str.begin(), (int (*)(int))std::toupper);
quote:
Original post by Arild Fines
It takes a committee to make something so conceptually simple so complicated...
quote:
Original post by gmcbay
And that is incredibly cool... the problem is, until you''re familiar with the STL it is also incredibly non-obvious and difficult to just ''look up'', which wouldn''t be the case if it were a more traditional API system.
quote:
Original post by gmcbay
I have very mixed feelings about this and other aspects of the STL.
On one hand, you''re right, this is completely non-obvious to someone who hasn''t dealt with the STL a lot. One would expect something more like myString.to_upper();
On the other hand, it is incredibly flexible, because you can use the same basic transform mechanism with other functions (tolower), or your own custom functions, and with different data types (not just strings). And that is incredibly cool... the problem is, until you''re familiar with the STL it is also incredibly non-obvious and difficult to just ''look up'', which wouldn''t be the case if it were a more traditional API system.
quote:
Original post by Fruny#include <string>
#include <algorithm>
#include <cctype>
std::transform(str.begin(), str.end(), str.begin(), (int (*)(int))std::toupper);
The function cast is required to disambiguate between the toupper function in the <locale> header and the one in the <cctype> header.
“Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” — Brian W. Kernighan
[edited by - Fruny on May 28, 2004 8:02:13 PM]
quote:
Original post by quorn
Uppercase doesn''t even exist in some languages. It''s best not to put something so specific on a general character string implementation. It belongs in locale and deserves to be conceptually separate. People ask questions and code as if ASCII was the only character encoding and that it should be expected to be the default.
quote:
Original post by Anonymous Poster
Bullshit. It works just fine and is trivial to use in plenty of other languages, such as Java, C# (or rather BCL), VB, Smalltalk...
quote:
Original post by Puzzler183quote:
Original post by Anonymous Poster
Bullshit. It works just fine and is trivial to use in plenty of other languages, such as Java, C# (or rather BCL), VB, Smalltalk...
Did you read any of the posts? Or better yet, do you speak more than one language? How about a language that dosn''t use the English alphabet? I somehow doubt it.
quote:
Original post by fallenang3lquote:
Original post by Fruny#include <string>
#include <algorithm>
#include <cctype>
std::transform(str.begin(), str.end(), str.begin(), (int (*)(int))std::toupper);
The function cast is required to disambiguate between the toupper function in the <locale> header and the one in the <cctype> header.
“Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” — Brian W. Kernighan
[edited by - Fruny on May 28, 2004 8:02:13 PM]
And it''s still not guaranteed to work because (according to the standard) toupper might be given C linkage, but here you''re casting it away so it''s illegal.
quote:
Original post by Arild Fines
Did you read any of the posts? Or better yet, do you speak more than one language? How about a language that dosn''t use the English alphabet? I somehow doubt it.
quote:
Original post by Puzzler183
I really don''t see what the problem is with the code. Could you point it out to me?
quote:
And I''m sorry they wrote smart code and languages like basic didn''t; no big shock I guess.
quote:
And what language do you speak?
void toupper(std::string& str){
std::transform(str.begin(), str.end(), str.begin(), (int (*)(int))std::toupper);
}
toupper(mystring);
quote:
Original post by quant
Was that difficult?
This topic has been locked by a moderator. New replies are not allowed.
With your permission, GameDev.net uses analytics cookies to understand how people use the platform. You can accept analytics or continue with necessary cookies only. Learn more