Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2015, 18:27   #1
Holocaust
 
Регистрация: 04.05.2015
Сообщений: 9
По умолчанию Количество пустых строк кода (SLOC)

Ребята проблема такова , код ниже должен высчитывать количество логических строк в файле , пустых строк , строк с комментариями . Программа высчитывает всё верно кроме количества пустых строк - получается заоблачное число . Может кто-то помочь ?
Код:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <stdio.h>
using namespace std;

int main()
{
    setlocale(LC_ALL, "Russian");
    int logicstring = 0;
    int emptystring = 0;
    int commentstring = 0;
    float t;
    int sk = 0;
    fstream in("1.txt");
	if (!in)	//проверка на существование файла
	{
		cout << "\nНевозможно открыть файл исходного текста программы!...\n";
		system("pause");
        exit(0);
	}
	string tmp;
    while(!in.eof())
    {
        getline(in,tmp);
        if(tmp.find("//")!= string::npos)
            commentstring++;
        if(tmp.find(" ")!= string::npos)
            emptystring++;
        if(tmp.find(";")!= string::npos)
            logicstring++;
        if(tmp.find("switch")!= string::npos)
            logicstring++;
        if(tmp.find("case")!= string::npos)
            logicstring++;
        if(tmp.find("if")!= string::npos)
            logicstring++;
        if(tmp.find("break")!= string::npos)
            logicstring++;
        sk++;
    }
    in.close();
    t = (sk / 100.0f * commentstring);
    cout<<"Кол-во логических строк кода: "<<logicstring;
    cout<<"\nКол-во пустых строк кода: "<<emptystring;
    cout<<"\nКол-во коментариев: "<<commentstring;
    cout<<"\nпроцент коментариев:"<<t<<"\n\n\n";
}
Holocaust вне форума Ответить с цитированием
Старый 16.11.2015, 19:31   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
if(tmp.find(" ")!= string::npos)
А ты зря решил, что пустая строка равна одному пробелу...
На твоем месте я бы поступал так:
1) Развернул текст в массив строк
2) Подсчитывал очередную строку из массива предварительно TRIM-мировав ее. Если она окажется после подстрижки пустой, значит плюсплюспоймали.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.11.2015, 20:13   #3
Holocaust
 
Регистрация: 04.05.2015
Сообщений: 9
По умолчанию

Я совсем бигинер , подскажешь как развернуть текст в массив строк ? Дальше сам соображу .
Holocaust вне форума Ответить с цитированием
Старый 16.11.2015, 20:36   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Дак чего тут подсказывать? Нужно написать некую функцию типа
Код:
bool isEmpty(string s){
 for(i=0;i<s.length();i++) if(s[i]!=' ') return false; return true;
}
И соответственно вместо if(tmp.find(" ")!= string::npos) написать if(isEmpty(tmp))

P.S. Кста если ты бигинер, то возьми задачку попроще.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.11.2015, 20:50   #5
Holocaust
 
Регистрация: 04.05.2015
Сообщений: 9
По умолчанию

Спасибо , всё работает
Holocaust вне форума Ответить с цитированием
Старый 16.11.2015, 21:22   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
смог бы объяснить строки этой части кода:
1)i<s.length()

2)return false; - я понимаю что , возвращает ложь , но я не понимаю смысла в этой строке.

3)return true;
Отвечу на твои вопросы тут, ибо ЛС для персонального срача... пардонте, конструктивного диалога тет-а-тет )))
1) i<s.length() - это условие цикла. Цикл должен пройтись по всей строке, считанной из файла

2) Смысл этого не в возвращении а в условии: if(s[i]!=' ') означает "Если в строке найден непробельный символ". Т.е. если найден такой символ - строка не пустая.

3) Если будет найдет непробел - цикл досрочно завершиться как и функция. Иначе return true укажет, что эта строка не содержит ничего кроме пробелов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
количество пустых строк Ernest027 БД в Delphi 2 20.08.2015 15:14
Сканирования строк. Зная количество строк и первый элемент, это количество символов с троке. dimon9 Общие вопросы C/C++ 8 02.11.2012 22:40
программа которая подсчитывает количество пустых строк в файле Вадим ы Помощь студентам 3 21.08.2010 08:32
Заполнение пустых строк.. Balina Microsoft Office Excel 9 02.12.2009 11:49
Как определить количество не пустых елементов масива SeRhy Общие вопросы C/C++ 6 21.10.2009 18:40