Я использую strstr для отображения имени класса в c++. Проблема с моим кодом заключается в том, что он ищет эту строку:
"class "
во всем входном файле. Результат выглядит так:
The CLASS name is class locCounter
The CLASS name is class ";
Вторая строка не должна быть там, она в основном отображает строку 7 из приведенного ниже кода, чего она не должна.
int locCounter::classCounter()
{
int count = 0;
ifstream theOtherFile ("loc2.cpp");
while (! theOtherFile.eof())
{
const char *one = "class ";
getline(theOtherFile, otherFileData);
const char *result = otherFileData.c_str();
while ((result = strstr(result, one)) != NULL)
{
cout << "The CLASS name is " << result << endl;
result++;
}
}
}
Кроме этого, мне интересно, как я могу заставить функцию также начать подсчет количества строк с момента, когда она найдет слово "класс", пока не попадет в последнюю фигурную скобку в классе.
Благодарю.
+ Изменить
while ((result = strstr(result, one)) != NULL)
в
if ((result = strstr(result, one)) != NULL)
Цикл while ищет все вхождения "class "
в вашем файле, а оператор if ищет только первое вхождение.
Возможно, вам стоит попробовать механизм регулярных выражений, например, Boost Regex
Затем вы можете использовать регулярные выражения, как в этом вопросе, чтобы передать их движку.
Попробуйте. Это очень просто.