1. ホーム
  2. c++

[解決済み] C++の文字列を大文字に変換する方法

2022-03-03 03:42:23

質問

C++の文字列を完全な大文字に変換する必要があります。しばらく探していたところ、1つの方法を見つけました。

#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 関数を使用します。

  1. toupper をグローバル名前空間で使用します (アクセスは ::toupper )であり、これはC言語からきている。

  2. toupper の中に std 名前空間(アクセスは std::toupper ) は、複数のオーバーロードを持つため、名前だけでは単純に参照できません。参照するためには、明示的に特定の関数シグネチャにキャストする必要がありますが、関数ポインタを取得するコードは醜く見えます。 static_cast<int (*)(int)>(&std::toupper)

あなたが using namespace std と書くと toupper が1.を隠し、名前解決のルールに従って選択されます。