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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Andreyuni
0 / 0 / 0
Регистрация: 01.11.2013
Сообщений: 5
#1

С++ CodeBlocks - C++

01.11.2013, 09:04. Просмотров 1661. Ответов 2
Метки нет (Все метки)

Здравствуйте, уважаемые пользователи этого великолепного форума))

Задание:

Подсчитать, сколько раз каждое положительное число встречается в каждой строке файла number1.txt. Номер строки, все встречающиеся числа и их количество вывести в файл number3.txt и на консоль. В конец файла number2.txt добавить слова "Result = " и количество строк в тексте, вывести полученный результат на консоль.
Обратить все строки файла text1.txt и вывести их в файл text2.txt.

Никак не могу найти ошибку в коде:
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#include <iostream>
#include <fstream> // нужен для работы с файлами
#include <string.h> // для работы со строками
#include <sstream> //строковый поток
#include <map> // отображение для подсчета повторяющихся слов
 
using namespace std;
void fillNumber(const char*, int); //для заполнения первого файла
void fillSecond(const char*, const char*);// заполнение второго файла по варианту
void fillThird(const char*, const char*);//заполнение третьего файла по варианту
void printFile(const char*); //печать файла
void fillText(const char*, const char*); //заполнение текстового файла
void fillTotal(const char*, int); // заполнение общего файла
int main ()
{
int n=100;
cout<<"Задайте количество чисел в файле: ";
cin>>n;
fillNumber("number1.txt",n);
cout<<"----------------Number1.txt--------------"<<endl;
printFile("number1.txt");
fillSecond("number1.txt","number2.txt");
cout<<"----------------Number2.txt--------------"<<endl;
printFile("number2.txt");
fillThird("number1.txt", "number3.txt");
cout<<"----------------Number3.txt--------------"<<endl;
printFile("number3.txt");
fillText("text1.txt","text2.txt");
cout<<"----------------Text2.txt--------------"<<endl;
printFile("text2.txt");
fillTotal("total.txt",80);
cout<<"----------------Total.txt--------------"<<endl;
printFile("total.txt");
return 0;
}
 
void fillNumber(const char* fname, int n)
/*
fname – имя заполняемого файла,
n – количество чисел в файле
Все файлы должны лежать в папке проекта С++ в каталоге debug
*/
{
// srand(time_t(0));// делаем генератор генератором «случайных» чисел
ofstream f(fname);//открываем файл для записи
while (n>0) //пока не закончились числа
{
int k = random()%11; //это количество чисел в строке
for (int j=1; (j<=k)&&(n>0);j++) //пока не закончились числа в строке
//либо все числа вообше
{
f << rand()%101 - rand()%101 << " "; //пишем число в файл
n--; //уменьшаем количество незаписанных чисел
}
f << endl; //конец строки
}
f.flush(); // сбрасываем буфер памяти в файл
f.close(); //закрываем файл
}
 
void printFile(const char* fname)
/*
Будем печатать файл, считывая информацию из него построчно
*/
{
int size=256; //размер считываемой строки
ifstream f(fname); //открываем файл для чтения
while (!f.eof()) //пока не кончился файл
{
char * s= new char[size]; //распределяем память под читаемую строку
f.getline(s, size); //читаем строку из файла
cout<<s<<endl; //печатаем на консоль
}
f.close();//закрываем файл
}
 
void fillSecond(const char* fINname, const char* fOUTname)
{
ifstream fIN(fINname); //файл для чтения
ofstream fOUT(fOUTname, ios::app); //файл для добавления в конец
int strNumber=0; // количество строк в исходном файле
while (!fIN.eof()) //пока не закончился файл
{
int size=256; //размер читаемой строки
char *s=new char[size];//распределяем память под строку
fIN.getline(s,size);//читаем строку
strNumber++; //наращиваем счетчик строк
}
fOUT<<"Result="<<strNumber<<endl; //записываем результат в файл
//далее делаем сброс буфера и закрываем оба файла
fIN.close();
fOUT.flush();
fOUT.close();
}
 
void fillThird(const char* fINname, const char* fOUTname )
{
ifstream fIN(fINname); //файл для чтения
ofstream fOUT(fOUTname); //файл для записи
int stringNumber=0; // номер строки
/*
Далее будем использовать отображения – это некое вместилище данных, которое может хранить связанные пары данных. Мы желаем в качестве такой пары хранить значение числа (прочитанное из строки файла) и количество его вхождений в читаемую строку. Для перебора элементов отображения нам понадобится специальный счетчик – итератор. Тогда с его помощью можно будет обращаться к элементам пары значений по именам first и second.
*/
map<int,int> numberInRow; //отображение целого числа на количество его вхождений
map<int,int>::iterator it; //итератор
while (!fIN.eof()) // пока не кончился файл
{
int size=256; //размер читаемой строки
char* s=new char[size];//распределяем память под читаемую строку
numberInRow.clear();//очищаем отображение
fIN.getline(s,size);//читаем строку из файла
/*
Далее, чтобы из прочитанной строки можно было выделить числа, преобразуем строку к входящему строковому потоку
*/
istringstream str(s);
stringNumber++; //увеличиваем счетчик строк
int nmb; //читаемое число
while (str>>nmb) //пока в строке есть числа, читаем их
{
if (nmb>0) numberInRow[nmb]++;
/*
и если число положительное, добавляем его в отображение в виде ключа (первого элемента пары – то, что стоит в квадратных скобках), а значение второго элемента пары наращиваем на единицу.
*/
}
/*
При помощи итератора перебираем все элементы отображения и записываем их в файл.
*/
fOU for (it=numberInRow.begin(); it!=numberInRow.end(); it++)
T<<"Строка №"<<stringNumber<<":"<<'\t';
fOUT<<it->first<< "->" <<it->second<<'\t';
fOUT<<endl;
}
fIN.close();
fOUT.close();
}
 
void fillText(const char* fINname, const char* fOUTname)
{
ifstream fIN(fINname); //файл для чтения
ofstream fOUT(fOUTname);// файл для записи
while (!fIN.eof()) //пока не конец файла
{
int size=256; //размер читаемой строки
char * s=new char[size];//распределяем память под читаемую строку
fIN.getline(s,size);//читаем строку
/*
Далее начиная, с настоящей длины строки (минус один, т.к. самый последний элемент строки - перевод каретки, а он нам не нужен) и до начала посимвольно перепечатываем ее в файл (реверсируем).
*
/
for (int i=strlen(s)-1;i>=0;i--)
fOUT<<s[i];
fOUT<<endl;
}
fIN.close);
(fOUT.close();
}
void fillTotal(const char*fname, int fieldWidth)
/*
Заполнение файла с выравниванием по правому краю и центру. fieldWidth – ширина страницы.
*/
{
ifstream number2("number2.txt");
ifstream text2("text2.txt");
ofstream total(fname);
int size=256;
while (!number2.eof())
{
char * s= new char[size];
number2.getline(s, size);
for (int i=0; i<=fieldWidth-strlen(s);i++)
total<<' '; //дополняем пробелы для выравнивания
total<<s<<endl;
}
number2.close();
while (!text2.eof())
{
char * s= new char[size];
text2.getline(s, size);
for (int i=0; i<=fieldWidth/2-strlen(s)/2;i++)
total<<' '; //дополняем пробелы для выравнивания
total<<s<<endl;
}
text2.close();
total.close();
}
}}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2013, 09:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос С++ CodeBlocks (C++):

Code::Bloks C++, В чем разница "codeblocks-12.11-setup.exe" и "codeblocks-12.11mingw-setup.exe" - C++
Захожу на сайт хочу скачать codeblocks чтобы на нем изучать си++ , толька н могу понять разницы там для виндовс есть четыре файла вот они ...

Codeblocks! - C++
Дело в том что я сижу под линуксом и пользуюсь Codeblocks. Я не как не могу разобраться, как там писать программы типа &quot;космос&quot;, т.е....

CodeBlocks 13.12 vs 10.05 - C++
Еще раз вынужден просить помощи у Сообщества. Есть программа (код С++) которая работала компилилась и дебагилась в Codeblocks 10.05...

CodeBlocks - C++
Помогите пожалуйста разобраться с проблемой: Не могу в среде CodeBlocks разобраться как определять характер компоновки((

Codeblocks - C++
как подключить русские буквы в с++ , выводит не понятные симвлы

codeblocks - C++
скачал codeblocks,не знаю как начать в нем работать. около года сидел в delphi?теперь не знаю как начать. очень жду ваших советов как...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
jurok_85
241 / 224 / 77
Регистрация: 21.02.2013
Сообщений: 519
Завершенные тесты: 1
01.11.2013, 18:23 #2
Ну для начала добавьте директивы #include<cstdlib> и #include<time.h> для использования функции rand()
MrGluck
Модератор
Эксперт CЭксперт С++
7210 / 4376 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
01.11.2013, 18:51 #3
1.
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
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <algorithm>
#include <iterator>
#include <cctype>
#include <unordered_map>
 
int main()
{
    std::ifstream ifs("number1.txt");
    if (!ifs) return 1;
    std::ofstream o2("number2.txt"), o3("number3.txt");
 
    using input_str  = std::istream_iterator<std::string>;
    using umap       = std::unordered_map<std::string, int>;
 
    int lineCounter = 0;
    for (std::string line; std::getline(ifs, line); lineCounter++)
    {
        umap um;
        std::istringstream ist(line);
        std::for_each(input_str(ist), input_str(), [&um](const std::string &s)
        {
            if (std::all_of(s.begin(), s.end(), isdigit))
                ++um[s];
        });
        o3 << "String " << lineCounter + 1 << ": ";
        for (auto &p: um)
            o3 << p.first << "(" << p.second << ") ";
        o3 << std::endl;
    }
 
    o2        << "Result = " << lineCounter << std::endl;
    std::cout << "Result = " << lineCounter << std::endl;
}
Добавлено через 3 минуты
2.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <fstream>
#include <string>
#include <algorithm>
 
int main()
{
    std::ifstream ifs("text1.txt");
    if (!ifs) return 1;
    std::ofstream o("text2.txt");
 
    for (std::string line; std::getline(ifs, line); o << line << std::endl)
        std::reverse(line.begin(), line.end());
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2013, 18:51
Привет! Вот еще темы с ответами:

codeblocks - C++
Codeblocks , chto delat chto by dobavit bibliotheku &lt;iostream.h&gt;

CodeBlocks - C++
Вообщем хочу поставить русскую кодировку(windows-866),погуглил,нашёл ответ,как превратить в 866 при её отсутствии. Вот совет: Но...

Не компилируется Codeblocks - C++
Всем Привет!!! Установил Codeblocks есть MinGW, вроде все синхронизировал, но при попытке компиляции не компилируется, а только выводит...

Codeblocks и модули - C++
нужно написать программу с модульным файлом, в котором три функции, мне вроде все понятно, но создаю файл с простой функцией #ifndef...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru