2012-02-17 3 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] 

?

편집 :

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); 
관련 문제