2012-02-28 8 views
0

何らかの理由で、「toupperを関数として使用できません」というエラーが表示され続けます。しかし、私のtoutpperには、小文字を大文字に変換するグローバル関数があります。何か他のものへの1つの名前を変更 -トゥーパーで動作するアレイの取得

#include <cctype> 
#include <iostream>    
#include <string> 

using namespace std;     

int main() 

{ 


    string input; 
    string output; 
    int toupper; 

    cout<<"Enter a String of Charchters to be Capitalized : "; 
    cin>>input; 
    string arrayinput[20]= input; 
    output = toupper(arrayinput); 
    cout<<"\n\n\n"<<output<<"\n\n\n"; 



cout<<"Press <Enter> to Exit"; 
cin.ignore(); 
cin.get();  
return 0;       
} 
+0

'string arrayinput [20] = input'はどうするのですか? – Naveen

+0

は入力を受け取り、それを配列にします – kd7vdb

+0

@ kd7vdb:それはどういう仕組みではありません。あなたは単に 'std :: string'を取って「配列にする」ことはできません。 –

答えて

3

あなたはint toupperと呼ばれるローカル変数を作成しました。

編集の追加: これ以上の問題があります。 inputは文字列です。その文字列の長さを反復処理し、string::at(i)を使用して各位置でchar*を取得したいとします。次に、atoiを使用して、charをintに変換します。これは、toupperが引数として取る型です。

+0

toupper変数を削除しましたが、「std :: string *」から「int」への無効な変換というエラーが発生しました。upperは整数でなければなりませんか? – kd7vdb

+0

@ kd7vdb、いいえ、toupper変数の名前を変更/削除してください。変数には関数自体と同じ名前が付いているため、エラーが発生します。 – ddacot

+0

これまで説明してきたように、配列(配列の最初の要素へのポインタ)を関数に渡すので、配列の実際の要素を渡す必要があります。 arrayinput [5] –

1

あなたは文字列の配列でそれをしたい場合は、変数名の問題を修正した後、ループ内でstd::transformを使用します。

for (auto& str : arrayinput) 
    std::transform(std::begin(str), std::end(str), std::begin(str), ::toupper); 

それともあなたは範囲ベース持っていない場合は、 for_eachを使用することができます:あなたは関数と同じ名前の変数を宣言することで、あいまいさを引き起こしている

std::for_each(std::begin(arrayinput), std::end(arrayinput), [](string& str) { 
    std::transform(std::begin(str), std::end(str), std::begin(str), ::toupper); 
}); 
+0

上記では 'string'を' toupper'で使用されるデータ型に変換する方法を説明しましたが、 'string'を使うことができれば好きでしょう。 – tmpearce

+0

@tmpearceいいえ、 'toupper'は文字のASCIIコードを返しますので、前後に変換する必要はありません。 'itoa'を使うのは、' 5'のような数字を文字列 '' 5 ''に変換することです。この場合は役に立ちません。 –

+0

あなたはそうです。 (私はitoaやatoi-goの文字列を使用しません!) – tmpearce

0

。すでに述べたように、変数の名前を変更するだけで解決できるはずです。

関連する問題