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

Для тех кто умеет работать с файлами (Вывести на экран только строки, содержащие двузначные числа) - C++

Восстановить пароль Регистрация
 
Roka
0 / 0 / 0
Регистрация: 05.11.2012
Сообщений: 25
11.12.2012, 23:23     Для тех кто умеет работать с файлами (Вывести на экран только строки, содержащие двузначные числа) #1
Необходимо создать программу, которая считывает из текстового файла информацию, обрабатывает ее в соответствии с индивидуальным заданием и выводит на экран заданное.
Индивидуальное задание :Вывести на экран только строки, содержащие двузначные числа.

Добавлено через 1 час 36 минут
Помогите пожалуйста.

Добавлено через 21 час 41 минуту
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2012, 23:23     Для тех кто умеет работать с файлами (Вывести на экран только строки, содержащие двузначные числа)
Посмотрите здесь:

Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа. C++
C++ Считать текст из файла и вывести на экран только предложения, не содержащие запятых
Программа, которая считывает текст из файла и выводит на экран строки, содержащие двузначные числа C++
Считать текст из файла и вывести на экран только предложения, не содержащие запятых C++
C++ Считать текст из файла, и вывести на экран только строки, содержащие двузначные числа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
12.12.2012, 05:13     Для тех кто умеет работать с файлами (Вывести на экран только строки, содержащие двузначные числа) #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
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
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
void read_and_print( char *s );
 
int main( int argc, char **argv )
{
    if( argc < 2 ) {
    printf( "Error: enter file name\n" );
    return EXIT_FAILURE;
    }
    FILE *file;
    int i;
    char *line = NULL;
    size_t len = 0;
    ssize_t read;
    
    if( (file = fopen( argv[1], "r")) == NULL ) {
    fprintf( stderr, "Error: couldn't read file %s\n", argv[1] );
    return EXIT_FAILURE;
    }
    
    while( (read = getline( &line, &len, file)) != -1 ) {
    read_and_print( line );
    }
    free( line );
    fclose( file );
    
    return EXIT_SUCCESS;
}
 
void read_and_print( char *s )
{
    char *ps = s;
    int status = 1;
    
    while ( *ps != '\n' && *ps != EOF ) {
    while( isspace(*ps) )
        ++ps;
    if( *ps == '-' || *ps == '+' )
        ++ps;
    if( *ps == '0' )
        ++ps;
    if( isdigit(*ps) && isdigit(*(ps+1)) && isspace(*(ps+2)) )
        ps = ps + 2;
    else {
        status = 0;
        break;
    }
    }
    if( status )
    printf( "%s", s );
    return;
}
Добавлено через 8 минут
Небольшая поправка:
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
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
void read_and_print( char *s );
 
int main( int argc, char **argv )
{
    if( argc < 2 ) {
    printf( "Error: enter file name\n" );
    return EXIT_FAILURE;
    }
    FILE *file;
    int i;
    char *line = NULL;
    size_t len = 0;
    ssize_t read;
    
    if( (file = fopen( argv[1], "r")) == NULL ) {
    fprintf( stderr, "Error: couldn't read file %s\n", argv[1] );
    return EXIT_FAILURE;
    }
    
    while( (read = getline( &line, &len, file)) != -1 ) {
    read_and_print( line );
    }
    free( line );
    fclose( file );
    
    return EXIT_SUCCESS;
}
 
void read_and_print( char *s )
{
    char *ps = s;
    int status = 0;
    
    while ( *ps != '\n' && *ps != '\0' ) {
    while( isspace(*ps) )
        ++ps;
    if( *ps == '\n' || *ps == '\0')
        break;
    if( *ps == '-' || *ps == '+' )
        ++ps;
    if( *ps == '0' )
        ++ps;
    if( isdigit(*ps) && isdigit(*(ps+1)) && isspace(*(ps+2)) ) {
        ps = ps + 2;
        status = 1;
    }
    else {
        status = 0;
        break;
    }
    }
    if( status )
    printf( "%s", s );
    return;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
12.12.2012, 14:08     Для тех кто умеет работать с файлами (Вывести на экран только строки, содержащие двузначные числа) #3
xtorne21st, Я прям-таки очень прошу, чтобы ответы на тему в разделе С++ писались на С++. Ибо если ТС-а удовлетворяет ответ на Си, значит ему в раздел Си => тема будет перенесена.

Добавлено через 50 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <fstream>
 
#include <boost/regex.hpp>
 
int main()
{
   const boost::regex re("(^|\\D)\\d{2}($|\\D)");
   std::ifstream ifs("file1.txt");
   std::string current;
   while (std::getline(ifs, current))
   {
      if (boost::regex_search(current, re))
      {
         std::cout << current << std::endl;
      }
   }
}
Bash
1
2
3
4
5
6
7
8
9
forever@pterois:~/My_pro1/cpp_pro$ cat file1.txt 
this is nothing
what is 23 its
now this is end
and 1234 hello
12 with
forever@pterois:~/My_pro1/cpp_pro$ ./new 
what is 23 its
12 with
DPS
 Аватар для DPS
32 / 32 / 3
Регистрация: 12.11.2011
Сообщений: 107
Завершенные тесты: 1
12.12.2012, 15:21     Для тех кто умеет работать с файлами (Вывести на экран только строки, содержащие двузначные числа) #4
Такой еще вариант)

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
#include<iostream>
#include<cctype>        //для функции isdigit()
#include<fstream>       //файлы
#include<string>        //строки
 
using std::string;
using std::cin;
using std::cout;
using std::endl;
using std::ifstream;
 
bool est_li_dve_cifri_v_stroke(const string &copy_stroka);
 
int main()
{
    setlocale(LC_ALL,"Rus");
 
    string namefile;
 
    cout<<"Введите путь к файлу:  ";
    getline(cin,namefile);
    
    ifstream in(namefile.c_str());;
 
    if(!in.is_open())
    {
        cout<<"Не удалось открыть файл!!!";
        exit(0);    //выход из программы
    }
 
    cout<<"*************************************************"<<endl;
 
    string stroka;
    bool a;
 
    while(in.good())
    {
        a=false;            //полагаем, что функция не содержит двухзначное число
        getline(in,stroka); //читаем строку
        a=est_li_dve_cifri_v_stroke(stroka);    //передаем ее в функцию, которая определяет, содержит ли строка двухзн. число
        
        if(a)       //если строка содержит двухзначн. число, выводим
            cout<<stroka<<endl;     //строку на экран
    }
 
    in.close();     //закрываем файл*/
 
    return 0;
}
 
bool est_li_dve_cifri_v_stroke(const string &copy_stroka)
{
    string::size_type i=0;
 
    char simvol;
 
    for(i=0;i!=copy_stroka.size();++i)  //от начала строки и до конца
    {
        if(isdigit (simvol=copy_stroka[i]&127) )    //если считанный символ - цифра, проверяем следующий
        {
            ++i;
 
            if(i==copy_stroka.size())   //если строка закончилась
                break;                  //выходим из цикла
            else if(isdigit(simvol=copy_stroka[i]&127) )    //иначе если считанный символ - цифра, проверяем следующий(число уже двухзначное)
                {
                    ++i;
 
                    if(i==copy_stroka.size()||(!isdigit( simvol=copy_stroka[i]&127)) )  //если строка закончилась или следующий символ - не цифра
                        return true;    //значит, строка содержит двухзначное число
                }
        }
    }
 
    return false;
}
Миниатюры
Для тех кто умеет работать с файлами (Вывести на экран только строки, содержащие двузначные числа)  
Roka
0 / 0 / 0
Регистрация: 05.11.2012
Сообщений: 25
12.12.2012, 19:23  [ТС]     Для тех кто умеет работать с файлами (Вывести на экран только строки, содержащие двузначные числа) #5
Спасибо народ) Очень помогли
Yandex
Объявления
12.12.2012, 19:23     Для тех кто умеет работать с файлами (Вывести на экран только строки, содержащие двузначные числа)
Ответ Создать тему
Опции темы

Текущее время: 07:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru