Найти первую операцию по указателю на символ - PullRequest
2 голосов
/ 10 августа 2011

У меня есть буфер символов, который содержит символы, прочитанные из файла.Мне нужно взять этот буфер символов и найти в нем первый символ конца строки.

Символами EOL в этом случае являются \ n, \ r, \ f.

Изначально я планировалсделать следующее:

// let's read into our buffer now...
char * m_pLineBuff;
if(!readCharBuf(m_pLineBuff, bytesToRead)) { report("Could not fill line buffer", RPT_ERROR, __PRETTY_FUNCTION__); }

// setup our newline candidates in an array
int iEOLChars[] = {'\n','\f','\r'};

// find the first instance of a newline character
int iEOLPosition = std::find_first_of(m_pLineBuff, m_pLineBuff+bytesToRead, iEOLChars, iEOLChars+3);

Однако я, очевидно, не могу передать указатель на символ в методе std::find_first_of - я могу передать только целое число.Точная ошибка, которую предоставляет мне компилятор:

error: invalid conversion from ‘char*’ to ‘int’

Это кажется мне странным, поскольку я определил начальные и конечные местоположения моего буфера символов и не понимаю, почему он не мог выполнить их итерациюищу первое появление любого из моих персонажей EOL.

Любой совет, как решить эту проблему?Есть ли способ использовать find_first_of, или я должен просто перебрать каждую позицию буфера символов и проверить, соответствует ли символ в этом месте любому из моих символов EOL.

Функция "find_first_of"Я имею в виду следующее: http://www.cplusplus.com/reference/algorithm/find_first_of/

Любая помощь всегда приветствуется.

Ответы [ 3 ]

5 голосов
/ 10 августа 2011

Функция find_first_of возвращает, в данном случае, указатель, а не индекс, поэтому попробуйте:

char *iEOLPosition = std::find_first_of(m_pLineBuff, m_pLineBuff+bytesToRead, iEOLChars, iEOLChars+3);
1 голос
/ 10 августа 2011

Я думаю, что проблема здесь в несоответствии типов:

char * m_pLineBuff;

int iEOLChars[] = {'\n','\f','\r'};

Попробуйте объявить ваш iEOLChars массивом char.

0 голосов
/ 10 августа 2011

Проверьте вашу функцию first_first_of Я думаю, что она никогда не может иметь 4 параметра
См. first_first_of

...