C++の文字列を完全に大文字に変換する必要があります。私はしばらく探していて、それを行う方法を見つけました:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
string input;
cin >> input;
transform(input.begin(), input.end(), input.begin(), toupper);
cout << input;
return 0;
}
残念ながら、これは機能せず、次のエラーメッセージを受け取りました。
'transform(std :: basic_string :: iterator、std :: basic_string :: iterator、std :: basic_string :: iteratorの呼び出しに一致する関数はありません。
私も動作しなかった他の方法を試しました。これが最も作業に近かった。
だから私が求めているのは、私が間違っていることです。たぶん私の構文が悪いか、何かを含める必要があります。私はわかりません。
ほとんどの情報はここにあります: http://www.cplusplus.com/forum/beginner/75634/ (最後の2つの投稿)
toupper
の前に二重コロンを置く必要があります。
_transform(input.begin(), input.end(), input.begin(), ::toupper);
_
説明:
2つの異なるtoupper
関数があります。
グローバル名前空間(_::toupper
_でアクセス)のtoupper
は、Cから取得されます。
toupper
名前空間(_std::toupper
_でアクセス)のstd
は、複数のオーバーロードを持っているため、単に名前だけで参照することはできません。参照するには特定の関数シグネチャに明示的にキャストする必要がありますが、関数ポインターを取得するコードは見苦しくなります:static_cast<int (*)(int)>(&std::toupper)
あなたは_using namespace std
_であるため、toupper
を書き込むとき、2。は1.を隠し、名前解決規則に従って選択されます。
ストリングアルゴリズムのブースト:
#include <boost/algorithm/string.hpp>
#include <string>
std::string str = "Hello World";
boost::to_upper(str);
std::string newstr = boost::to_upper_copy("Hello World");
できること:
string name = "john doe"; //or just get string from user...
for(int i = 0; i < name.size(); i++) {
name.at(i) = toupper(name.at(i));
}
#include <iostream>
using namespace std;
//function for converting string to upper
string stringToUpper(string oString){
for(int i = 0; i < oString.length(); i++){
oString[i] = toupper(oString[i]);
}
return oString;
}
int main()
{
//use the function to convert string. No additional variables needed.
cout << stringToUpper("Hello world!") << endl;
return 0;
}