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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
#1

По текстовым файлам и строкам - C++

05.09.2011, 14:35. Просмотров 2204. Ответов 38
Метки нет (Все метки)

Задана последовательность идентификаторов, разделенных сериями пробелов. Последовательность задана строкой символов (string) заканчивается символом ‘*’.
2.Найти длину такого первого идентификатора в котором произведение всех четных цифр максимально. А можно листинг для решения этой задачи по проще написать? без итерраторов и прочих штук, используя только создание файла открытие записать ну и циклы надо для условий, ну без каких то дополнительных возможностей языка, чем проще тем лучше, и чтоб тектовый файл сохранялся и показывал решение задачи. И вот что такое индентификатор в моей задаче? а то если бы понял может сам бы написал я думал это буква но тогда причем тут произведение цифр? откуда тогда цифры возмутся
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2011, 14:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос По текстовым файлам и строкам (C++):

Работа с текстовым файлом С++ - C++
Здравствуйте! Помогите написать программу которая будет выводить на консоль студентов, имеющих по трём предметам (Math Analysis, Physics,...

Работа с текстовым файлом - C++
Дан текстовый файл, фразы в котором отделены друг от друга точками, а слова – пробелами и знаками препинания. Удалить из этого файла лишние...

Работа с текстовым деком - C++
Здравствуйте! Необходимо в дек добавить вид животного и работать с ним (прочитать, удалить). Есть программа для работы с числами ...

Работа с текстовым файлом - C++
Всем доброго вечера! Имеется текстовый файл в котором информация занесена таким образом -Название государства, Численность, Плотность....

Работа с текстовым файлом - C++
Здравствуйте. Имеется текстовый файл, в котором известно количество очков, набранных каждой из 19 команд-участниц первенства по футболу....

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

38
fasked
Эксперт С++
4951 / 2531 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
07.09.2011, 16:18 #16
-=ЮрА=-, то есть... Вы хотите сказать, что какая-нибудь CRC32, реализованная на Си и С++, это два разных алгоритма?
0
-=ЮрА=-
Заблокирован
Автор FAQ
07.09.2011, 16:22 #17
Цитата Сообщение от fasked Посмотреть сообщение
что какая-нибудь CRC32
- одно и тоже, но програмно достиается по разному(значит алгоритм другой), я вобще сейчас подключу CStdiofile и буду построчное ReadString делать, это не выходит не изменит алгоритма чтения?

Добавлено через 42 секунды
fasked, прошу ответить на этот пост По текстовым файлам и строкам
1
fasked
Эксперт С++
4951 / 2531 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
07.09.2011, 16:27 #18
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
одно и тоже, но програмно достиается по разному(значит алгоритм другой)
Я предпочитаю считать, что это детали реализации, а сам алгоритм должен быть абстрагирован от них.
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
прошу ответить на этот пост
Ну Вам же никто не говорил, что так нельзя делать. Просто, что приведенный код ближе к Си, чем С++. В частности strtok. Тот же эффект более безопасно достигается использованием std::string и метода этого класса find_first_of (или как там его).
1
-=ЮрА=-
Заблокирован
Автор FAQ
07.09.2011, 16:31 #19
Цитата Сообщение от fasked Посмотреть сообщение
Ну Вам же никто не говорил, что так нельзя делать. Просто, что приведенный код ближе к Си, чем С++. В частности strtok. Тот же эффект более безопасно достигается использованием std::string и метода этого класса find_first_of (или как там его).
- за сие спасибо
1
fasked
Эксперт С++
4951 / 2531 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
07.09.2011, 16:35 #20
-=ЮрА=-, и да... вдовесок, чтобы не быть голословным Если несколько потоков будут использовать strtok, то она перестанет, то есть будет некорректно работать. Данная функция не отвечает требованиям потокобезопасности, так как в своем коде использует статически объявленные (static) данные. У методов std::string с этим все хорошо.
Понятно, что данное приложение и не претендует быть многопоточным, однако, лучше заранее себя обезопасить, если таковая возможность существует.
0
-=ЮрА=-
Заблокирован
Автор FAQ
07.09.2011, 16:50 #21
Цитата Сообщение от fasked Посмотреть сообщение
strtok, то она перестанет, то есть будет некорректно работать.
- когда пишу код прекрасно понимаю когда строка нужна после проработки а когда и нет (не первый год стучу по клаве), на данном алгоритме str == NULL после цикла уже нигде не используется...
0
fasked
Эксперт С++
4951 / 2531 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
07.09.2011, 16:55 #22
-=ЮрА=-, кажется Вы меня не поняли, я говорю о том, что цикл возможно вообще никогда не завершится. Или завершится сразу, не доработав до конца. Поведение непредсказуемое.
0
asics
Freelance
Эксперт С++
2850 / 1785 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
07.09.2011, 17:00 #23
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
через месяц примут стандарт вернуть h в заголовки
Вы имете ввиду С++11 ?
0
-=ЮрА=-
Заблокирован
Автор FAQ
07.09.2011, 17:02 #24
Цитата Сообщение от asics Посмотреть сообщение
Вы имете ввиду С++11 ?
- да я образно писал Через лет 5 уже о коде написанном сейчас в стандарте скажут - мдаааа написано не по стандарту
0
asics
07.09.2011, 17:05
  #25

Не по теме:

-=ЮрА=-, Юмор-то в чем ? Не понимаю...

0
fasked
Эксперт С++
4951 / 2531 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
07.09.2011, 17:06 #26
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Через лет 5 уже о коде написанном сейчас в стандарте скажут - мдаааа написано не по стандарту
Ну и правильно скажут Улучшение языка должно вести за собой улучшение кода, в том числе и старого.
Только вот я сомневаюсь, что пять лет это возможный срок для стандарта C++
0
-=ЮрА=-
Заблокирован
Автор FAQ
07.09.2011, 17:15 #27
Цитата Сообщение от fasked Посмотреть сообщение
что пять лет это возможный срок для стандарта C++
- ну а зачем так долго ждать - макулатура нужна всегда, да и в туалет нужно с чем-то эти 5 лет ходить
Ладно топик исчерпан - прошу не считать это сообщение как офтоп
0
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
17.09.2011, 14:00  [ТС] #28
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 <fstream.h>
#include <windows.h> //malloc, GetLastError, strerror, system
#include <string>  //strtok
#include <iostream.h>
#include <stdio.h>   //i/0
 
int ProizvChetnihCifr(char * buf);
int main()
{
        char delim[] = " ";//Строка разделителей, т.е разделителями могут быть и другие символы
        //в конктреном случае строка всего из 1-го символа, т.к. разделитель по условию '*'
        char *str,*buf;
        int sLen, proizved = 0, mproizved = 0;
        char Name[15];
        cout << "vvedite ima faila "  ;
        cin >> Name;
        ifstream f(Name);
        if(!f)
        cout <<"Error open text.TXT:";
        else
        {
                f.seekg(0,ios::end);
                sLen = f.tellg();
                f.seekg(0,ios::beg);
 
                        f.read(str,sLen);
                        str[sLen] = '\0';
                        buf = strtok(str,delim);//Разбиваем строку на токены
                        while(buf)
                        {
                                if(mproizved < (proizved = ProizvChetnihCifr(buf)))
                                {
                                        mproizved = proizved;
                                        sLen = strlen(buf);
                                }
                                buf = strtok(NULL,delim);
                        }
                        cout << "Dlinna max identificatora :" << sLen <<endl;
                        cout <<"Proizvedenie chetnih v nem:" << "" << mproizved <<endl;
                }
                f.close();
        system("pause");//Пауза до нажатия любой клавиши
        return 0;
}
int ProizvChetnihCifr(char * buf)
{
        int ret = 1,chislo;
        for(int i = 0; i < strlen(buf); i++)
        {
                if (isdigit (buf[i]))
                {
                        chislo = buf[i] - ('0');
                        if(chislo % 2 == 0)
                                ret *= chislo;
                }
        }
        return ret;
}
 Комментарий модератора 
Используйте теги форматирования кода!
0
-=ЮрА=-
Заблокирован
Автор FAQ
17.09.2011, 16:09 #29
lexflax,
Цитата Сообщение от lexflax Посмотреть сообщение
ProizvChetnihCifr(char * buf)
- имена внутренных переменных функций можно вибирать любыми(лишь бы они не шли в конфликт с объявленными ранее глобальными переменными и зарезервированными служебними словами), так что если бы вместо char * buf написал char * s сути дела это не изменило бы.
То что заменил stdio-вский поток на stream-ский
Цитата Сообщение от lexflax Посмотреть сообщение
ifstream f(Name);
тоже сути алгоритма не изменяет, лишь бы всё синтаксису языка соответсвовало...

PS:Касательно кода в общем то предложенный мной ранее код был чисто Си-шный, ну или весьма и весьма близкм именно к стандарту Си, в модернезированном тобой коде идёт уже смесь Си и С++, я конешно не компилил но визуально норм
1
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
19.09.2011, 14:14  [ТС] #30
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
#include <fstream.h>
#include <windows.h> //malloc, GetLastError, strerror, system
#include <string>  //strtok
#include <iostream.h>
#include <stdio.h>   //i/0
int ProizvChetnihCifr(char * but)
{
    int ret = 1,chislo;
    for(int i = 0; i < strlen(but); i++) //вот тут strlen используется а разве не надо объявлять библеотеку ctype.h она без нее работает но как то ведь должна она откуда то браться?
 
    if (isdigit (but[i])) // вот тут but[i] проверяют если ли в нем цифры, а откуда в нем вообще символы возмутся? если в него ничего не записывалось и он пустой? или я че не так понимаю? факт он работает но я хочу понять весь процесс....
    {
                chislo = but[i] - ('0');// тут вот что означет '0' и почему он в скобках?
                        if(chislo % 2 == 0)
                        ret *= chislo;
                }
 
        return ret;
}
int main()
{
        char delim[] = " ";//Строка разделителей, т.е разделителями могут быть и другие символы
        //в конктреном случае строка всего из 1-го символа, т.к. разделитель по условию '*'
        char *str,*buf;
        int sLen, proizved = 0, mproizved = 0;
        char Name[15];
        cout << "vvedite ima faila "  ;
        cin >> Name;
        ifstream f(Name);
        if(!f)
        cout <<"Error open text.TXT:";
        else
        {
                f.seekg(0,ios::end);
                sLen = f.tellg();
                f.seekg(0,ios::beg);
 
                        f.read(str,sLen);
                        str[sLen] = '\0';
                        buf = strtok(str,delim);//Разбиваем строку на токены
                        while(buf)
                        {
                                if(mproizved < (proizved = ProizvChetnihCifr(buf)))
                                {
                                        mproizved = proizved;
                                        sLen = strlen(buf);
                                }
                                buf = strtok(0,delim);
                        }
                        cout << "Dlinna max identificatora :" << sLen <<endl;
                        cout <<"Proizvedenie chetnih v nem:" << "" << mproizved <<endl;
                }
                f.close();
        system("pause");//Пауза до нажатия любой клавиши
        return 0;
}
0
19.09.2011, 14:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2011, 14:14
Привет! Вот еще темы с ответами:

Работа с текстовым файлом - C++
Ниже представлен код программы, которая ищет символ заданный пользователем в txt файле (&quot;input.txt&quot;), и те строки текста где находится этот...

Работа с текстовым файлом - C++
Прошу помощи. Должно быть консольное приложение. Описываю последовательность действий. Текстовый файл 1234.txt розмещен в каталоге с...

Работа с текстовым массивом - C++
Помогите пожалуйста с задачкой: в текстовом массиве содержащим произвольное количество строк необходимо произвести замену исходного слова...

Работа с текстовым файлом - C++
Здравствуйте ребята, на практических столкнулась с проблемой, необходима ваша помощь) Есть открытый текстовый файл с несколькими строками...


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

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

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