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

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

Войти
Регистрация
Восстановить пароль
 
 
s92p
11 / 11 / 0
Регистрация: 12.09.2011
Сообщений: 42
#1

работа с файлами - C++

12.09.2011, 15:06. Просмотров 1091. Ответов 19
Метки нет (Все метки)

мне бы надо на C........... помогите пожалуйста, а то чет не могу разобраться


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
#include <iostream>
#include <stdio.h>
#include <string>
#include <fstream>
#include <Windows.h>
 
int main()
{
        std::fstream myfile;
        std::string parse_string,word;
        std::string::size_type beg_idx = 0, end_idx = 0;
        const std::string delim_string (" ");
        int howManyStrings = 0;
        bool onlyTwo = true;
        myfile.open("file.txt",std::ifstream::in);
 
        while(!myfile.eof())
        {
                beg_idx = 0, end_idx = 0;
                getline(myfile,parse_string); //Ваш 2й пункт.
                howManyStrings++; //Ваш 1й пункт.
                /*Ваш 3й пункт написан очень убого. Приведите пример данных из файла. Я так понимаю это чтото подобное: 
                11 11 22 55 33 66 88 44 99
                111 222 5555 8888 77 99
                Если, и только если, я прав, то Вам поможет следующее:*/
                while(std::string::npos != (beg_idx = parse_string.find_first_not_of( delim_string, end_idx )))
                {
                        if ( std::string::npos == (end_idx = parse_string.find_first_of( delim_string, beg_idx )) )
                        {
                                word = parse_string.substr ( beg_idx );
                                if(word.size()!=2){onlyTwo = false;break;}
                        }
                        else
                        {
                                word = parse_string.substr ( beg_idx, end_idx - beg_idx );
                                if(word.size()!=2){onlyTwo = false;break;}
                        }
                }
                if (onlyTwo)
                        std::cout << parse_string << std::endl;
        }
        std::cout << "string number: " << howManyStrings << std::endl;
        system("pause");
        return 0;
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2011, 15:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос работа с файлами (C++):

Работа с файлами. - C++
Пожалуйста,помогите решить..В субботу экзамен,а я физически не успеваю написать 6 программок..( Создать телефонный справочник для...

Работа с файлами - C++
Добрый вечер! Помогите, есть какая - то лажа: код компилится но консоль виснет и в файл ничего не записывается. #include...

Работа с файлами - C++
Открыть каталог, проверить файлы на обычность, проверить в именах файлов наличие знака $, и если он есть заменить на размер файла. ...

работа с файлами - C++
где char data должно быть чтение из файла.Пример как я это реализовал тут //функция шифрования void encryption(unsigned long long...

Работа с файлами - C++
Есть толпа зверушек. Нужно указать: номер записи, название животного, длительность его жизни, его среду обитания и вес. При задании среды...

Работа с файлами - C++
Дан файл f, содержащий сведения о веществах: указывается название вещества, его удельный вес и проводимость (проводника, полупроводник,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
fasked
Эксперт С++
4937 / 2517 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
12.09.2011, 15:08 #2
s92p, а чего сделать то надо?
0
s92p
11 / 11 / 0
Регистрация: 12.09.2011
Сообщений: 42
12.09.2011, 15:13  [ТС] #3
а блин.... короче
считывает текст из файла и выводит на экран только строки, не
содержащие двузначных чисел.
0
-=ЮрА=-
Заблокирован
Автор FAQ
12.09.2011, 16:45 #4
Цитата Сообщение от s92p Посмотреть сообщение
а блин.... короче
считывает текст из файла и выводит на экран только строки, не
содержащие двузначных чисел.
Вот код, файл данных и скриншот работы (всё написано на Си)
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
#include <windows.h>//malloc, system("pause");
#include <string.h> //strrchr, strtok
#include <stdio.h>  //i/o
 
bool IsTwoDigitsSubStr(char * s);//Проверка строки s на содержание двухзначных чисел
 
int main()
{
    long sLen;
    char * str, *buf;
    FILE * f = fopen("data.txt","rb+");
    if(!f)
        printf("Error open data.txt\r\n");
    else
    {
        //Опеределяем длинну файла
        fseek(f,0,SEEK_END);//курсор в конец файла
        sLen = ftell(f);//длина = позиция курсора
        fseek(f,0,SEEK_SET);//курсор в начало файла
 
        //считываем сразу весь файл в буфер
        if(!(str = (char *)malloc((sLen + 1)*sizeof(char))))
            printf("Allocation memory error\r\n");
        else
        {
            fread(str,sLen,1,f);
            str[sLen] = '\0';//Убрали мусор вконце строки
 
            if(str)
            {
                //Работаем со строкой от её конца
                buf = strrchr(str,'\n');
                while(buf)
                {
                    //Если строка не содержит двузначных чисел - выводим её
                    if(!IsTwoDigitsSubStr(buf + 1))
                        printf("%s\r\n",buf + 1);
                    str[sLen - strlen(buf) - 1] = '\0';//Исключаем из строки buf
                    buf = strrchr(str,'\n');
                    sLen = strlen(str);
                }
                if(str)//Вконце останется 1-ая строка
                if(!IsTwoDigitsSubStr(str))
                    printf("%s\r\n",str);
            }
        }
        fclose(f);
    }
    system("pause");//Останов программы до нажатия любой клавиши
    return 0;
}
 
bool IsTwoDigitsSubStr(char * s)
{
    bool bRet = false;
    long sLen;
    char * str;
    char * buf;
    char delim[] = " ;";//Возможніе разделители токенов - пробел и ';'
    if(s)
    {
        //В программе используем strtok которая обнуляет строку 
        //поэтому для анализа копируем строку
        sLen = strlen(s);
        str = (char *)malloc((sLen + 1)*sizeof(char));
        sprintf(str," %s",s);
        str[sLen] = '\0';
        buf = strtok(str,delim);
        while(buf)
        {
            if(strlen(buf) == 2)//В подстроке два символа
            if(isdigit(buf[0]) && isdigit(buf[1]))
                bRet = true;//Если оба символы строки цифры то значит buf - двузначное число
//          if(bRet)
//              break;//Если стркоа содержит хоть 1-но двузначное число прекращаем её разбор
            buf = strtok(NULL,delim);
        }
        //Чистить память после strtok не нужно str == NULL
    }
    return bRet;
}
1
Миниатюры
работа с файлами  
Вложения
Тип файла: txt data.txt (129 байт, 21 просмотров)
s92p
11 / 11 / 0
Регистрация: 12.09.2011
Сообщений: 42
12.09.2011, 21:50  [ТС] #5
может еще с этим поможешь
???????????

Написать программу, которая преобразует введенное с клавиатуры восьмиразрядное
двоичное число в десятичное
0
-=ЮрА=-
Заблокирован
Автор FAQ
13.09.2011, 09:14 #6
Цитата Сообщение от s92p Посмотреть сообщение
Написать программу, которая преобразует введенное с клавиатуры восьмиразрядное
двоичное число в десятичное
- хорошо уже занимаюсь
0
mimicria
return (true);
1958 / 1095 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
13.09.2011, 09:36 #7
Цитата Сообщение от s92p Посмотреть сообщение
Написать программу, которая преобразует введенное с клавиатуры восьмиразрядное
двоичное число в десятичное
Как вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream.h>
#include <math.h>
 
int main()
{
 cout << "2: ";
 char dv[8];
 cin >> dv;
 int des=0;
 for (int k=0;k<8;k++)
  des+=(dv[k]-48)*pow(2,k+1);
 cout << des;
 system("pause");
 return 0;
}
1
-=ЮрА=-
Заблокирован
Автор FAQ
13.09.2011, 09:38 #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
#include <string.h>//strlen
#include <stdio.h> //i/o
#include <ctype.h> //toupper
#include <conio.h> //getch
#include <math.h>  //pow
 
int BinToDec(char * bin);
 
int main()
{
    char bin[9];
    do
    {
        printf("Enter binary string (max 8-digits)\r\n");
        scanf("%s",bin);
        printf("Decimial num : %d\r\n", BinToDec((char *)&bin[0]));
        printf("Y - new input\r\n");
    }
    while(toupper(getch()) == 'Y');
    return 0;
}
 
int BinToDec(char * bin)
{
    int num = 1;
    int sLen;
    if(bin != NULL)
    {
        sLen = strlen(bin);
        for(int i = 0; i < sLen; i++)
        if(bin[i] == '1')
           num += pow(2,sLen - i - 1);
    }
    return num;
}
1
Миниатюры
работа с файлами  
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
13.09.2011, 09:39 #9
mimicria, забыли место для символа '\0' забронировать в массиве dv Понимаю, в вашем алгоритме это не нужно, но не то как-то выглядит.
0
-=ЮрА=-
Заблокирован
Автор FAQ
13.09.2011, 09:40 #10
Цитата Сообщение от mimicria Посмотреть сообщение
for (int k=0;k<8;k++)
- а если я захочу ввести 10100 - программа тоже до 8-ми считать будет???
1
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
13.09.2011, 09:51 #11
Очень смущает функция pow(). Я бы экономнее сделал:

C++
1
2
3
4
5
6
7
char s[N];
int i, x, len;
...
len = strlen(s);
for(x = i = 0; i < len; i++)
   x = x*2 + s[i] - '0';
std::cout << x;
1
mimicria
return (true);
1958 / 1095 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
13.09.2011, 09:57 #12
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
а если я захочу
В задаче ясно сказано
введенное с клавиатуры восьмиразрядное двоичное число
Я не старался сделать больше необходимого
1
fasked
Эксперт С++
4937 / 2517 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
13.09.2011, 10:29 #13
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Как вариант еще такой метод (ввод данных не делал, так как я демонстрирую способ перевода числа, а не способ ввода с клавиатуры; и проверку строки на корректность данных тоже не делал именно поэтому ) :
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <string.h>
 
int binary_string_to_int(const char *ptr) {
   int offset = strlen(ptr), result = 0;
   while (offset)
      result |= (*ptr++ - '0') << --offset;
      
   return result;
}
 
int main() {
   printf("%d\n", binary_string_to_int("001111"));
   return 0;
}
3
s92p
11 / 11 / 0
Регистрация: 12.09.2011
Сообщений: 42
13.09.2011, 16:37  [ТС] #14
Цитата Сообщение от s92p Посмотреть сообщение

Написать программу, которая преобразует введенное с клавиатуры восьмиразрядное
двоичное число в десятичное


я немного по другому написал
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdio.h"
 
int main()
{
 
    char    keyb_array[10];         // keyboard input buffer
    int             result = 0;
    int counter = 0;
 
    gets(keyb_array);
 
    for (counter = 0; counter < 8; counter++ )
    {
        result = result<<1;
        result += (int)( keyb_array[ counter ] - 0x30 );
 
    }
 
    printf("%i", result);
    return result;
 
}
Добавлено через 5 минут
ограничение же стоит (k<8)



у меня еще задачка есть вот

Удалить из текста, находящегося в файле, каждое четное предложение.
то же на C


у меня проблема на счет записи в буфер и чтение из него
0
-=ЮрА=-
Заблокирован
Автор FAQ
13.09.2011, 16:56 #15
Цитата Сообщение от s92p Посмотреть сообщение
Удалить из текста, находящегося в файле, каждое четное предложение.
то же на C
- сейчас займусь - только вопрос предложения в новый файл записать или только вывести???
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2011, 16:56
Привет! Вот еще темы с ответами:

Работа с файлами - C++
int main() { int mass; srand(time(NULL)); for (int i = 0; i &lt; 100; i++) mass = rand() % 1000; FILE *file; file =...

Работа с файлами - C++
На указатель ругается Possibly incorrect assignment Строки в файл записывает, но не выводит. Что не так? #include &lt;fstream.h&gt; ...

Работа с файлами - C++
Обработку символьной строки оформить в виде функции. Сканирование строки и доступк её элементам выполнить ТОЛЬКО сиспользованием команд...

Работа с файлами - C++
Как можно создавать файлы в цикле? Например, хочу создать 10 файлов в определенной директории.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.09.2011, 16:56
Ответ Создать тему
Опции темы

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