Подсчет символов в файловом потоке

0

Я пытаюсь сделать функцию how_many(), которая подсчитывает количество символов определенного типа, например "\n" или "," в потоке файлов. Вот моя попытка:

int how_many(char mychar, anifstream myfile){
    int result;
    while(!myfile.eof())
    {
       if(myfile.get()==mychar){result=result+1;}
    }
    myfile.close(); // Closes the filestream "my file"
    return result; 
}

Первый вопрос: "\n" символ или строка? (Если это так, тогда я должен сделать первый ввод строки вместо символа)

Второй вопрос: можете ли вы объяснить возникшее сообщение об ошибке? (или, наоборот, прямо указать на неправильное использование синтаксиса в моем коде):

 warning: result of comparison against a string literal is unspecified
  (use strncmp instead) [-Wstring-compare]
 note: candidate function not viable: no known conversion from 'const char [2]' to
  'char' for 1st argument
  • 0
    на какую версию C ++ вы ориентируетесь?
  • 0
    Вы уверены, что это тот же код, который выдает эту ошибку?
Показать ещё 1 комментарий
Теги:

3 ответа

1
Лучший ответ

"\n" - это строковый литерал, который имеет тип const char[2] и содержит два символа: '\n' и '\0'.

'\n' - это символ символа escape-символа, который имеет тип char.

Учтите, что result переменной в вашей функции не был инициализирован.

  • 0
    Да это исправило!
  • 1
    Я не вижу, как что-то в этом ответе «исправляет» что-либо, хотя его утверждения точны.
Показать ещё 1 комментарий
0

'\n' является символом, тогда как "\n" является строковым литералом (типа const char[2] последний для null)

Для подсчета предпочтительного алгоритма

#include <algorithm>
#include <iterator>
//..

std::size_t result = std::count( std::istream_iterator<char>(myfile), 
                                 std::istream_iterator<char>(),
                                  mychar 
                                ) ;
0

Вы можете сделать гистограмму, пока вы читаете файл:

std::vector<char> character_counts(256); // Assuming ASCII characters

// ...

char c;
while (cin >> c) // The proper way to read in a character and check for eof
{
  character_counts[c]++; // Increment the number of occurances of the character.
}

В том случае, если вы отправили сообщение, вы можете найти число "\n":

cout << "Number of \'\\n\' is: " << character_counts['\n'] << endl;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню