2012-02-17 4 views
0

文字列を小文字に変換するためにSTL関数for_eachを使用しようとしていますが、何が間違っているのかわかりません。tolower()でfor_eachを使用する

clean = for_each(temp.begin(), temp.end(), low);

一時は文字列を保持している文字列です。ここで問題になっているfor_eachラインです。そして、ここで私が低いために書いた機能です:

void low(char& x) 
{ 
x = tolower(x); 
} 

そして、私は得続けるコンパイラエラーは、次のようなである:私は間違っ

error: invalid conversion from void (*)(char&) to char [-fpermissive] 

何をしているのですか?

EDIT:

void clean_entry (const string& orig, string& clean) 
{ 
string temp; 
int beginit, endit; 

beginit = find_if(orig.begin(), orig.end(), alnum) - orig.begin(); 
endit = find_if(orig.begin()+beginit, orig.end(), notalnum) - orig.begin(); 

temp = orig.substr(beginit, endit - beginit); 

clean = for_each(temp.begin(), temp.end(), low); 
} 
+0

です。小さな完全な例を提供できますか? –

答えて

2

for_eachの戻り値は、この場合、lowにそれを—を渡された関数である: は、ここで私が書いています全体の機能です。だから、この:

clean = for_each(temp.begin(), temp.end(), low); 

がこれに相当します

for_each(temp.begin(), temp.end(), low); 
clean = low; 

何が本当にしたいことはあるとき、おそらくこの:

for_each(temp.begin(), temp.end(), low); // note: modifies temp 
clean = temp; 

(またはあなただけの、そもそもtempを排除することができますし、全体を通してcleanを使用してください)。

+0

ありがとう、私は何を考えていたのか分からない。私はfor_eachが動作する方法を誤解したと思います。 – Mongo

5

あなたがやろうとしている何のための標準的なイディオムは、私がテストプログラムを試してみましたが、エラーを取得していない

#include <algorithm> 
#include <string> 

std::string data = "Abc"; 
std::transform(data.begin(), data.end(), data.begin(), ::tolower); 
関連する問題