Использование for_each с tolower () - PullRequest
0 голосов
/ 17 февраля 2012

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

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

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

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);
}

Ответы [ 2 ]

6 голосов
/ 17 февраля 2012

Стандартная идиома для того, что вы пытаетесь сделать, это

#include <algorithm>
#include <string> 

std::string data = "Abc"; 
std::transform(data.begin(), data.end(), data.begin(), ::tolower);
2 голосов
/ 17 февраля 2012
Возвращаемое значение

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 во всем).

...