C++ 文字列を大文字に変換する方法 質問する

C++ 文字列を大文字に変換する方法 質問する

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 つの投稿)

ベストアンサー1

の前に二重コロンを置く必要がありますtoupper:

transform(input.begin(), input.end(), input.begin(), ::toupper);

説明:

2 つの異なるtoupper機能があります。

  1. toupper::toupperC に由来するグローバル名前空間 ( でアクセス) にあります。

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

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

おすすめ記事