1 / 1 / 0
Регистрация: 06.07.2012
Сообщений: 9
1

Вывести из файла на экран только содержащие двузначные числа строки

13.07.2012, 21:52. Показов 3759. Ответов 10
Метки нет (Все метки)

Дорогие форумчане, не откажите в помощи!!
Вот есть задание "написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа"

Сам попытался сделать, вот что написал
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
int main() {
    FILE * file = fopen( "input.txt", "rt" );
    if ( file == 0 ) {
        printf( "Can't find and open input file\n" );
        return 1;
    }
    while ( ! feof( file ) ) {
        char line[ 256 ];
        if ( fgets( line, 255, file ) != 0 ) {
            int n;
            if ( sscanf( line, "%i", &n ) == 1 ) {
                if ( n >= 10 && n <= 99 ) {
                    printf( "%s", line );
                }
            }
        }
    }
    fclose( file );
}
Не судите строго, не так давно учусь программированию! Пока не все получается!
Помогите пожалуйста исправить ошибки в коде, чтобы выводило правильно) А то у меня запускается процесс компиляции, а строки не выводит

Заранее спасибо!!

 Комментарий модератора 
Не дублируйте темы - это нарушает правила форума!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.07.2012, 21:52
Ответы с готовыми решениями:

Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа.
Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие...

Вывести на экран слова из строки, содержащие двузначные числа
Помогите, пожалуйста, написать программу, которая считывает текст с клавиатуры и выводит на экран...

Считать текст из файла и вывести на экран только строки, содержащие двузначное числа
Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие...

Вывести из файла на экран только те строки, в которых есть числа
Требуется написать программу, которая выводит из файла на экран только те строки, в которых есть...

10
Заблокирован
Автор FAQ
13.07.2012, 22:15 2
Цитата Сообщение от Vonder Посмотреть сообщение
Помогите, пожалуйста найти ошибку в коде, не пойму что не так сделано.
Большое спасибо тому, кто поможет!!
- ошибка в логике алгоритма, а точнее в предположении что в строке сразу же 1-м идёт двухзначное
Цитата Сообщение от Vonder Посмотреть сообщение
sscanf( line, "%i", &n )
, сейчас поможем...
0
18 / 18 / 12
Регистрация: 25.06.2011
Сообщений: 99
13.07.2012, 22:28 3
В текстовом файле содержатся только символы в кодах. Чтобы из символов "99", например, получить число 99, надо преобразовать код символа "9" в цифру 9 и т.д., из полученных цифр слепить число и уже полученное число проверять на двузначность.
0
Заблокирован
Автор FAQ
13.07.2012, 22:32 4
Vonder, вот рабочий алгоритм на сонове твоего кода
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
#include <ctype.h> //isdigit
#include <stdio.h> //i/o
 
//Ôóíêöèÿ ïðîâåðÿåò ñîæåðæèò ëè ñòðîêà õîòÿ áû 1-íî äâóõçíà÷íîå ÷èñëî
int isStrHas2digNumbers(char * str);
 
int main()
{
    //Õîðîøî áóäåì ïîëàãàòü, ÷òî ñòðîêè â ôàéëå êîðî÷å 256 ñèìâîëîâ
    char line[256] = {0};//÷òî â îáùåì ñëó÷àå ñîâñåì íå òàê
    int nLines  = 0;//Áóäåò ñîæåðæàòü ñóììàðíîå ÷èñëî ñòðîê ñ äâóõçíà÷íûìè
    FILE * file = fopen( "input.txt", "rt" );
    if ( file == 0)
        printf( "Can't find and open input file\n" );
    else
    {
        while ( ! feof( file ) ) 
        {
            if ( fgets( line, 255, file ) )
            if ( isStrHas2digNumbers(line))
            {
                nLines = nLines + 1;//óâåëè÷èâàåì çíà÷åíèå ñ÷¸ò÷èêà
                printf("%s\n", line);//ïå÷àòàåì ñòðîêó
            }
        } 
        fclose(file);
    }
    printf("input.txt contains from %d lines with 2digit values\n", nLines);
    getchar();
    return 0;
}
 
int isStrHas2digNumbers(char * str)
{
    int i;
    int nCount    = 0;
    int isContain = 0;//Ôëàã óêàçûâàþùèé ÷òî â ñòðîêå åñòü äâóõçíà÷íûå
    if(str != NULL)
    {
        for(i = 0; str[i] != '\0' && !isContain; i = i + 1)
        {
            if(isdigit(str[i]))//Âñòðåòèëè öèôðó
            {
                //Öèêë äëÿ ïîäñ÷¸òà ÷èñëà ïîäðÿä èäóùèõ öèôð
                for(nCount = 0;str[i] != '\0'; i = i + 1)
                {
                    if(isdigit(str[i]))
                        nCount = nCount + 1;
                    else
                        break;
                }
                if(nCount == 2)
                    isContain = 1;
            }
        }
    }
    return isContain;
}
Содержимое input.txt
gdfh25dfhfg6656
jhg
jkghk415hjg
k2jhk15j1kfh1jgh
ghkjhk1km5jhk
fjk223h1k5jh4fgj
hg
kgh2k1jh
hgk2jl15
hg2k4ghk15gk
2h1541555
g555ghj555gjh1gh5ghj55
Миниатюры
Вывести из файла на экран только содержащие двузначные числа строки  
1
1 / 1 / 0
Регистрация: 06.07.2012
Сообщений: 9
13.07.2012, 22:32  [ТС] 5
okamy, это по таблице аски коды цифр смотреть?
1
18 / 18 / 12
Регистрация: 25.06.2011
Сообщений: 99
13.07.2012, 22:34 6
Да. Для кодов цифр все очень легко. Коды в текстовом файле можно проверять только на вхождение в диапазон кодов цифр.
0
-=ЮрА=-
13.07.2012, 22:36
  #7

Не по теме:

От себя: Я постарался реализовать программу с возможно меньшим число вхождений стандартніх функций и простой логикой пробора строки на предмет наличия двузначных. Всё можно написать и более продвинуто а также можно использовать возможности С++ и std::string, но как я понял вариант С++ вообще не рассматривается

0
1 / 1 / 0
Регистрация: 06.07.2012
Сообщений: 9
13.07.2012, 22:39  [ТС] 8
-=ЮрА=-, Спасибо вам большое! Все отлично работает))
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11715 / 7221 / 1711
Регистрация: 25.07.2009
Сообщений: 13,222
13.07.2012, 23:18 9
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
 
int have_2digits_number(const char * s) {
    while ( s = strpbrk(s, "0123456789") ) {
        int i;
        if ( ( i = atoi(s) ) > 9 && i < 100 )
            return 1;
        while ( isdigit(*++s) )
            ;
    }
    
    return 0;
}
 
#define FILE_NAME "file.txt"
 
int main(void) {
    char buf[BUFSIZ];
    FILE * f;
    
    if ( ! ( f = fopen(FILE_NAME, "r") ) ) {
        perror("fopen");
        exit(1);
    }
    
    while ( fgets(buf, BUFSIZ, f) )
        if ( have_2digits_number(buf) )
            printf("%s", buf);
    
    if ( ferror(f) || fclose(f) ) {
        fprintf(stderr, "Somethink is wrong with input file!\n");
        exit(1);
    }
    
    exit(0);
}
2
Заблокирован
Автор FAQ
13.07.2012, 23:47 10
easybudda, прикольная идея с выделением цифирей с помощью strpbrk (об этой функции слышал но не разу не использовал, возьму себе на вооружение)!У меня была идея сгенить 128 - 48 + 9 массив чаров для strtok потом поразбивать строку на цифровые лексемы и из неё sscanf-ом подхватывать цифири, после уже смотреть в интервале ли они 9 < val && val < 100 или нет, но отбросил её т.к. код громоздким выходил, а тут всё strpbrk решает оказывается
У меня только одно предложение к усовершенствованию
Цитата Сообщение от easybudda Посмотреть сообщение
atoi(s)
думаю можно заменить на if( sscanf(s,"%d",&i) ) тем самым избавляем себя от stdlib хотя тут на усмотрение что больше нравиться atoi или sscanf
0
Заблокирован
Автор FAQ
13.07.2012, 23:59 11
Вобщем вот мои мысли о strtok (как и говорил из за подготовки ASCII талицы немного раздут вышел)
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 <ctype.h> //isdigit
#include <stdio.h> //i/o
#include <string.h>
 
//Ôóíêöèÿ ïðîâåðÿåò ñîæåðæèò ëè ñòðîêà õîòÿ áû 1-íî äâóõçíà÷íîå ÷èñëî
int isStrHas2digNumbers(char * str);
 
int main()
{
    //Õîðîøî áóäåì ïîëàãàòü, ÷òî ñòðîêè â ôàéëå êîðî÷å 256 ñèìâîëîâ
    char line[256] = {0};//÷òî â îáùåì ñëó÷àå ñîâñåì íå òàê
    int nLines  = 0;//Áóäåò ñîæåðæàòü ñóììàðíîå ÷èñëî ñòðîê ñ äâóõçíà÷íûìè
    FILE * file = fopen( "input.txt", "rt" );
    if ( file == 0)
        printf( "Can't find and open input file\n" );
    else
    {
        while ( ! feof( file ) ) 
        {
            if ( fgets( line, 255, file ) )
            if ( isStrHas2digNumbers(line))
            {
                nLines = nLines + 1;//óâåëè÷èâàåì çíà÷åíèå ñ÷¸ò÷èêà
                printf("%s\n", line);//ïå÷àòàåì ñòðîêó
            }
        } 
        fclose(file);
    }
    printf("input.txt contains from %d lines with 2digit values\n", nLines);
    getchar();
    return 0;
}
 
int isStrHas2digNumbers(char * str)
{
    int i;
    int val;
    char delim[128 - (48 + 9)] = {0};//Íàøà ñòðîêà ñ ïå÷àòàåìûìè ñèìâîëàìè ASCII
    for(i = 0; i < 128 - (48 + 9); i++)
        delim[i] = i + (48 + 9);
    char * tok    = NULL;
    char buf[256] = {0};//Áóôôåð äëÿ ñòðîêè
    int isContain = 0;//Ôëàã óêàçûâàþùèé ÷òî â ñòðîêå åñòü äâóõçíà÷íûå
    if(str != NULL)
    {
        strcpy(buf, str);
        for(tok = strtok(buf,delim); tok != NULL && !isContain; tok = strtok(NULL,delim))
        {
            if(sscanf(tok,"%d", &val))//Âñòðåòèëè öèôðó
            if(9 < val && val < 100)
                isContain = 1;
        }
    }
    return isContain;
}
Миниатюры
Вывести из файла на экран только содержащие двузначные числа строки  
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2012, 23:59
Помогаю со студенческими работами здесь

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

Вывести на экран все строки из файла f1.txt, содержащие данную строку
3. Дан текстовый файл f1.txt и строка символов S1. Вывести на экран все строки из файла f1.txt,...

Вывести на экран из файла только строки, содержащие двузначные числа
Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие...

Считать текст из файла и вывести на экран только строки, содержащие двузначные числа
Написать прогу,которая считывает текст из файла и выводит на экран только строки,содержащие...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru