Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
gusar
0 / 0 / 1
Регистрация: 27.10.2014
Сообщений: 21
#1

Скопировать из файла в файл все строки, которые не содержат цифры. Подсчитать количество строк по условию - C++

09.03.2015, 17:20. Просмотров 813. Ответов 7
Метки нет (Все метки)

Скопировать из файла F1 в файл F2 все строки, которые не содержат цифры. Подсчитать количество строк, которые начинаются на букву «А» в файле F2.
http://www.cyberforum.ru/cpp-beginners/thread1405747.html
Если можно,то с комментариями.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2015, 17:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Скопировать из файла в файл все строки, которые не содержат цифры. Подсчитать количество строк по условию (C++):

Подсчитать количество строк текстового файла f, которые содержат цифры
Дано файл f.Подсчитать количество строк файла f, которые содержат цифры.

1. Скопировать из файла F1 в файл F2 строки, которые не содержат слова, начинающиеся на одну букву 2. Определить номер слова в котором больше всего г
1. Скопировать из файла F1 в файл F2 строки, которые не содержат слова,...

Файл: Подсчитать количество строк , которые оканчиваются буквой 's', и считать их из файла.
Помогите пожалуйста, не могу сообразить как написать код( Записать в программе...

Необходимо подсчитать количество строк матрицы, которые не содержат ни одного 0 элемента.
Ребята, помогите пожалуйста разобраться с задачкой. Дана целочисленная...

Скопировать из файла F1 в файл F2 строки, которые начинаются с буквы A
я не особо эту тему понимаю, помогите кто может.

7
Tordek
55 / 49 / 37
Регистрация: 22.01.2015
Сообщений: 176
09.03.2015, 18:32 #2
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
#include <iostream.h>
#include <conio.h>
#include <Classes.hpp>
#include <ctype.h>
#include <vcl.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{TStringList *F = new TStringList;//Создаём список, в который будем загружать файл
F->LoadFromFile("F1.txt");//загрузка файла
int max = F->Count;
for(int i = 0;i<max;++i)//Организуем цикл по всем строкам списка
     {int cmax = F->Strings[i].Length();//Длинна текущей строки
     for(int j = 1;j<=cmax;++j)//цикл по всем символам строки
          if (isdigit(F->Strings[i][j])) {F->Delete(i--);max--;break;}//Проверяем, является ли текущий символ цифрой, если да -- удаляем строку и уменьшаем управляющую переменную цикла
     }
int k = 0;//кол-во строк на букву "A"
max = F->Count;
for(int i = 0;i<max;++i)//Цикл по всем строкам сформировавшегося списка
     if (F->Strings[i][1] == 'A') ++k;//Если первый символ текущей строки == "A" -- увеличиваем счётчик
F->SaveToFile("F2.txt");//сохраняем список в F2
delete F;
printf("kolichestvo strok v F2, nachinaushihsya na <<A>> = %d",k);
getch();
        return 0;
}
Файлы должны существовать в директории проекта
0
DiffEreD
1441 / 778 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
09.03.2015, 23:45 #3
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
#include <iostream>
#include <fstream>
#include <iterator>
#include <string>
#include <vector>
#include <algorithm>
#include <cctype>
#include <boost/algorithm/string.hpp>
 
int main()
{
   std::ifstream in("F1.txt");
   if (in.is_open())
   {
      std::vector<std::string> lines;
      std::string text{std::istreambuf_iterator<char>(in), std::istreambuf_iterator<char>()};
      boost::split(lines, text, boost::is_any_of("\n\r"), boost::token_compress_on);
      std::ofstream out("F2.txt");
      std::size_t num_of_lines_begin_A = 0;
      std::copy_if(lines.begin(), lines.end(), std::ostream_iterator<std::string>(out, "\n"),
      [&](const std::string& str){
         if (str.front() == 'A') ++num_of_lines_begin_A;
         return std::none_of(str.begin(), str.end(), ::isdigit);
      });
      std::cout << "Lines beginning from A: " << num_of_lines_begin_A << "\n";
   }
   else
      std::cout << "Error openning file!\n";
}
0
Kant
33 / 33 / 18
Регистрация: 15.05.2013
Сообщений: 236
10.03.2015, 05:38 #4
Могу ошибаться, но вы похоже считаете символ А из F1 при записывание в F2.
В F2 могут быть данные до того, как мы что-то туда скинем. Следовательно надо сделать дозапись.

В пол пятого утра башка не варит. Вроде верно написал.
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
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <iterator>
#include <algorithm>
 
using namespace std;
 
 
vector<string> split(const string& str, const string& delimiters);
 
int main(int argc, char *argv[])
{
    ifstream in_f1("D:\\F1.txt");
 
    //текст файла
    string text{istreambuf_iterator<char>(in_f1),
                istreambuf_iterator<char>()};
    in_f1.close();
 
    //тут строки без цифр, split разбивает строку по разделителю
    vector<string> lines_no_digits = split(text, "\n");
 
    //открываем на дозапись
    ofstream out_f2("D:\\F2.txt", ios_base::app);
 
    //копируем все строки в которых нет цифр
    // 1 перебираем строки
    // 2 отправляем строку в лямду на проверку
    // 3 если нет цифр в строке - загоняем в файл
    copy_if(lines_no_digits.begin(), lines_no_digits.end(),
            ostream_iterator<string>(out_f2, "\n"),
            [](const string& str)
    { return none_of(str.begin(), str.end(), ::isdigit); });
 
    out_f2.close();
 
    ifstream in_f2("D:\\F2.txt");
    int count_simbol = 0;
    string f2{ istreambuf_iterator<char>(in_f2),
                istreambuf_iterator<char>()};
 
    //перебираем все символы если видим А увеличиваем счетчик
    for_each(f2.begin(),f2.end(), [&](const char simbol) { if(simbol == 'A') ++count_simbol; } );
    cout << "count_simbol = " << count_simbol << endl;
 
    return 0;
}
 
 
vector<string> split(const string& str, const string& delimiters) {
    if(str.empty()) return vector<string>();
    if(delimiters.empty()) return vector<string>();
 
    size_t lastPos = str.find_first_not_of(delimiters, 0);
    size_t pos = str.find_first_of(delimiters, lastPos);
 
    vector<string> tokens;
    while (string::npos != pos || string::npos != lastPos) {
        string token = str.substr(lastPos, pos-lastPos);
        tokens.push_back(token);
        lastPos = str.find_first_not_of(delimiters, pos);
        pos = str.find_first_of(delimiters, lastPos);
    }
 
    return tokens;
}
0
MicM
824 / 483 / 324
Регистрация: 29.12.2009
Сообщений: 1,106
Завершенные тесты: 1
10.03.2015, 08:25 #5
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
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
 
bool cmp (char data)
{
    return isdigit(data) ? true : false;
}
 
int main()
{
    ifstream in ("F1");
    ofstream out ("F2");
    string str;
    int count = 0; // кол-во слов, начинающихся на А
    while (getline (in, str))
    {
        // если строка не содержит цифру
        if (find_if (str.begin(), str.end(), cmp)==str.end())
        {
            out << str <<endl; // то записываем ее в F2
            // и если первый символ - A
            if (str.front()=='A' || str.front()=='a')
                ++count; // увеличиваем счетчик
        }
    }
    cout <<count <<endl;
}
0
DiffEreD
1441 / 778 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
10.03.2015, 10:45 #6
Kant, думаю второй раз считывать файл незачем, можно за первым проходом посчитать нужное:
C++
1
2
3
4
5
6
7
8
9
std::size_t num_of_lines_begin_A = 0;
      std::copy_if(lines.begin(), lines.end(), std::ostream_iterator<std::string>(out, "\n"),
      [&](const std::string& str){
         if (std::none_of(str.begin(), str.end(), ::isdigit)) {
            if (str.front() == 'A') ++num_of_lines_begin_A;
            return true;
         }
         else return false;
      });
0
gusar
0 / 0 / 1
Регистрация: 27.10.2014
Сообщений: 21
10.03.2015, 11:13  [ТС] #7
Очень помогло.За комментарии отдельное спасибо.
0
Kant
33 / 33 / 18
Регистрация: 15.05.2013
Сообщений: 236
10.03.2015, 20:35 #8
DiffEred, "Скопировать из файла F1 в файл F2 все строки, которые не содержат цифры. Подсчитать количество строк, которые начинаются на букву «А» в файле F2.
Если можно,то с комментариями."
Я посчитал, что под копированием имеется ввиду вставка в конец - дозапись.


Во втором файле могут быть данные, вы их затрете и не посчитаете какое там было кол-во 'А'.
Копировать строку если она проходит условие, что там нет числа. И там же делаем подсчет.

C++
1
2
3
4
5
6
std::copy_if(lines.begin(), lines.end(), std::ostream_iterator<std::string>(out, "\n"),
      [&](const std::string& str){
         if (std::none_of(str.begin(), str.end(), ::isdigit)) {
            if (str.front() == 'A') ++num_of_lines_begin_A;
            return true;
         }
Добавлено через 4 минуты
Кстати, getline лучше для этого подходит. Все хочется С++11, но надо ещё вдумываться нафига.
0
10.03.2015, 20:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2015, 20:35
Привет! Вот еще темы с решениями:

Дан текстовый файл. Выведите все строки, которые содержат хотя бы один пробел
Дан текстовый файл. Выведите все строки, которые содержат хотя бы один пробел....

Работа с текстовыми файлами. С одного файла переписать в другой все строки, которые не содержат латинские буквы
Помогите пожалуйста !!:wall::-/:gsorry::tender: У меня не получается...

Скопировать из файла F1 в файл F2 все строки, начинающиеся на букву «А»
Помогите пожалуйста,это срочно! Скопировать из файла F1 в файл F2 все строки,...

Функция принимает 2 имени файла и копирует во второй файл из первого только те строки, которые не содержат гласных букв
Функция принимает 2 имени файла и копирует во второй файл из первого только те...


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

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

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