2012-02-17 3 views
0

Я пытаюсь использовать функцию STL for_each для преобразования строки в нижний регистр, и я понятия не имею, что я делаю неправильно. Вот for_each линия вопрос:Использование for_each с tolower()

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

Где температура является строкой, которая держит строку. А вот функция, которую я написал для низко:

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 «s возвращаемого значения является функция, которую вы прошли его — в этом случае, 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); 
Смежные вопросы