Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Напишите (консольную) программу, принимающую на вход имя файла и набор параметров. В зависимости от параметров программа должна работать в трёх режима - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Двунаправленная очередь http://www.cyberforum.ru/cpp-beginners/thread885489.html
Всем привет. Помогите решить задание по С++. Реализовать структуру данных двунаправленая очередь, содержащая следующие методы: добавить элемент к концу и началу очереди, удалить элемент из начала и...
C++ Как сделать, чтобы можно было не однократно вводить значения? Как сделать, чтобы можно было не однократно вводить значения. http://www.cyberforum.ru/cpp-beginners/thread885484.html
Как распознать цифру или пробел в string? C++
Дана задача: /* Результаты вступительных экзаменов представлены в виде списка из N строк, * в каждой строке которого записаны фамилия студента и отметки по каждому из М экзаменов. * Определить...
Очередь, список из чисел C++
Создать список из целых чисел. Удалить лишние элементы в списке так, чтобы в результирующем списке каждый элемент был не меньше среднего арифметического всех элементов, следующих за ним. Надо...
C++ Как узнать тип шаблонного класса во время выполнения программы? http://www.cyberforum.ru/cpp-beginners/thread885459.html
Тоесть: имеем класс list<int> или list<double>, и как узнать какой это тип? Ну int или double?
C++ Создать класс Человек, имеющий имя, возраст Здравствуйте! Не могли бы Вы помочь мне сделать вот эту задачу: Создать класс Человек, имеющий имя, возраст. Определить конструкторы, деструктор и функцию печати. Создать public-производный класс... подробнее

Показать сообщение отдельно
Dmitry_Tomsk
0 / 0 / 0
Регистрация: 30.05.2013
Сообщений: 3

Напишите (консольную) программу, принимающую на вход имя файла и набор параметров. В зависимости от параметров программа должна работать в трёх режима - C++

30.05.2013, 19:39. Просмотров 2048. Ответов 5
Метки (Все метки)

Вообщем такое же задание

Добавлено через 2 минуты
Напишите (консольную) программу, принимающую на вход имя файла и набор параметров. В зависимости от параметров программа должна работать в трёх режимах:
1) test -f Test.tst -m words -v mother
печатает количество слов «mother» в файле «Test.tst»
2) test -f Test.tst -m checksum
печатает 32-хбитную чексумму, рассчитанную по алгоритму checksum = word1 + word2 + … + wordN (word1..wordN – 32-хбитные слова, представляющие содержимое файла)
3) test -h
печатает информацию о программе и описание параметров.

При написании тестового задания мы ожидаем увидеть программу на языке С++ (а не «чистом» С), несмотря на некоторую избыточность С++ для данной задачи.


ВОТ НАПИСАЛ КОД:

Кликните здесь для просмотра всего текста
-----------test.h-------------
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <string>
#include <iostream>
#include <vector>
/*хранит данные командной строки, определяет выполняемую команду*/
struct test{
    test(const std::vector<std::string>& m); 
    void do_test(); // выполняем заданную команду
private: 
    enum { povtor, checksum, help, unknow }  command;
    std::string file_in;
    std::string word; 
};
---------test.cpp------------
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "test.h"
#include <fstream>
#include <bitset>
 
test::test(const std::vector<std::string>& m) : command(unknow), file_in(""), word("") {
    
    //разбиваем командную строку на составляющие
    if( m[0] != "test" ) throw int(); //генерируется исключение при неправильном задании командной строки
 
    switch(m.size()) {
    case 2 : 
        if(m[1] == "-h") command = help;
        break;
    case 7 :
        if(m[1] == "-f" && m[3] == "-m" && m[4] == "words" && m[5] == "-v"){
            command = povtor;
            file_in = m[2];
            word = m[6];}
        break;
    case 5 : 
        {
            if(m[1] == "-f" && m[3] == "-m" && m[4] == "checksum"){
                command = checksum;
                file_in = m[2];}
            break;
        }
    };
    
    if( command == unknow ) throw int(); //генерируется исключение при неправильном задании командной строки
}
 
void test::do_test(){
 
    if(command == help) {
        std::cout << " Programma prinimaet na vhod imiy faila i nabor parametrov. V zavisimosti ot parametrov programma rabotaet v treh regimah: \n" ;
        std::cout << "1.) test -f Test.txt -m words -v mother \n";
        std::cout << "pechataet kolichestvo slov <<mother>> v faile <<Test.txt>> \n";
        std::cout << "2.) test -f Test.txt -m checksum \n";
        std::cout << " pechataet 32-bit checksum, passchitannuy po algoritmu checksum = word1 + word2 + … + wordN (word1..wordN - 32-bit slova, predstavliayshie sodergimoe faila) \n";
        std::cout << "3.) test -h \n";
        std::cout << " pechataet informaciy o programme i opisanie parametrov. \n";
        return;
    }
 
    int number = 0;
    std::string slovo;
    if(command == povtor){
        std::ifstream f_in(file_in.c_str());
        if(!f_in) throw file_in;
        // за каждую итерацию извлекаем из файла по одной строке и находим в ней каждое совпадение со словом word  
        while (!f_in.eof()) {
            getline(f_in, slovo); // считываем строку
            int pos = 0;
            while (true)
            {
                pos = slovo.find(word,pos); // с позиции pos ищем совпадение 
                if (pos != std::string::npos) { // если совпадение не найдено  pos принимает знаечение string::npos
                    number++;
                    pos += word.size();
                } else break;
            }
          }
 
        std::cout << "Kolichestvo povtorov slova " + word + " ravno " << number << std::endl;
    
    } else {// случай определения checksum
        std::ifstream f_in(file_in.c_str(),std::ios_base::binary); // бинарный режим открытия файла
        if(!f_in) throw file_in;
        
        int v, s = 0;
        while(!f_in.eof())
        {
             f_in.read((char*)&v, 4); //считываем 4 байта
             s += v;
        }
 
        std::cout << " 32-bit checksum  = " << std::bitset<32>(s) << std::endl; // выводим 32-х битную чексумму в файл
        f_in.close();
    }
}
--------------main--------------------
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "test.h"
 
int main(int argc, char* argv[]){
 
    try{
        //записывем командную строку в вектор v
        std::vector<std::string> v;
        for(int i=1; i<argc; i++)
            v.push_back(std::string(argv[i]));
 
        test t(v);   
        t.do_test(); // выполняем заданную в командной строке команду
 
    } catch(int){ std::cout << "nepravilno vvedena komandnai stroka spravka: test -h ";}
    catch(std::string e){ std::cout << "error open file   " << e; }
    catch(...) { std::cout << "error in program"; };
    
    return 0;
};


Походу вообще нечего нормального не написал, хотелось бы услашать советы!
Заранее спасибо

Добавлено через 29 минут
В более читабельном виде как то так:
test.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <string>
#include <iostream>
#include <vector>
/*хранит данные командной строки, определяет выполняемую команду*/
struct test{
    test(const std::vector<std::string>& m); 
    void do_test(); // выполняем заданную команду
private: 
    enum { povtor, checksum, help, unknow }  command;
    std::string file_in;
    std::string word; 
};
test.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "test.h"
#include <fstream>
#include <bitset>
 
test::test(const std::vector<std::string>& m) : command(unknow), file_in(""), word("") {
    
    //разбиваем командную строку на составляющие
    if( m[0] != "test" ) throw int(); //генерируется исключение при неправильном задании командной строки
 
    switch(m.size()) {
    case 2 : 
        if(m[1] == "-h") command = help;
        break;
    case 7 :
        if(m[1] == "-f" && m[3] == "-m" && m[4] == "words" && m[5] == "-v"){
            command = povtor;
            file_in = m[2];
            word = m[6];}
        break;
    case 5 : 
        {
            if(m[1] == "-f" && m[3] == "-m" && m[4] == "checksum"){
                command = checksum;
                file_in = m[2];}
            break;
        }
    };
    
    if( command == unknow ) throw int(); //генерируется исключение при неправильном задании командной строки
}
 
void test::do_test(){
 
    if(command == help) {
        std::cout << " Programma prinimaet na vhod imiy faila i nabor parametrov. V zavisimosti ot parametrov programma rabotaet v treh regimah: \n" ;
        std::cout << "1.) test -f Test.txt -m words -v mother \n";
        std::cout << "pechataet kolichestvo slov <<mother>> v faile <<Test.txt>> \n";
        std::cout << "2.) test -f Test.txt -m checksum \n";
        std::cout << " pechataet 32-bit checksum, passchitannuy po algoritmu checksum = word1 + word2 + … + wordN (word1..wordN - 32-bit slova, predstavliayshie sodergimoe faila) \n";
        std::cout << "3.) test -h \n";
        std::cout << " pechataet informaciy o programme i opisanie parametrov. \n";
        return;
    }
 
    int number = 0;
    std::string slovo;
    if(command == povtor){
        std::ifstream f_in(file_in.c_str());
        if(!f_in) throw file_in;
        // за каждую итерацию извлекаем из файла по одной строке и находим в ней каждое совпадение со словом word  
        while (!f_in.eof()) {
            getline(f_in, slovo); // считываем строку
            int pos = 0;
            while (true)
            {
                pos = slovo.find(word,pos); // с позиции pos ищем совпадение 
                if (pos != std::string::npos) { // если совпадение не найдено  pos принимает знаечение string::npos
                    number++;
                    pos += word.size();
                } else break;
            }
          }
 
        std::cout << "Kolichestvo povtorov slova " + word + " ravno " << number << std::endl;
    
    } else {// случай определения checksum
        std::ifstream f_in(file_in.c_str(),std::ios_base::binary); // бинарный режим открытия файла
        if(!f_in) throw file_in;
        
        int v, s = 0;
        while(!f_in.eof())
        {
             f_in.read((char*)&v, 4); //считываем 4 байта
             s += v;
        }
 
        std::cout << " 32-bit checksum  = " << std::bitset<32>(s) << std::endl; // выводим 32-х битную чексумму в файл
        f_in.close();
    }
}
main

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "test.h"
 
int main(int argc, char* argv[]){
 
    try{
        //записывем командную строку в вектор v
        std::vector<std::string> v;
        for(int i=1; i<argc; i++)
            v.push_back(std::string(argv[i]));
 
        test t(v);   
        t.do_test(); // выполняем заданную в командной строке команду
 
    } catch(int){ std::cout << "nepravilno vvedena komandnai stroka spravka: test -h ";}
    catch(std::string e){ std::cout << "error open file   " << e; }
    catch(...) { std::cout << "error in program"; };
    
    return 0;
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru