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

Проверка равенства символов. Оптимизировать код - C++

Восстановить пароль Регистрация
 
Арсен_
 Аватар для Арсен_
2 / 2 / 0
Регистрация: 25.11.2012
Сообщений: 27
07.12.2012, 11:57     Проверка равенства символов. Оптимизировать код #1
Добрый день, есть задача, я срузу напишу что надо сделать:

во входном файле в первой строке дано число n - где 1 >= n <= 1000, а в остальных n строках, строки длину от 1 до 30 символов. Надо проверить первый символ равно 4 символу?
И вывести в выходной файл, сколько строк удовлетвояют данному условию.

Я решаю таким способом:
C++
1
2
3
4
5
6
7
8
9
10
#include <fstream>
 
main()
{
    std::fstream I("input.txt"), O("output.txt", 2);
    char k[31]; int p = 0;
    while(I >> k)
        if(k[0] == k[3]) p++ ;
    O << p;
}
Мне надо сократить код как можно меньше, в длине кода пробелы и переносы строк не счетаются.
В данном коде 121 символ. Я знаю что 100% данный код сократить или реализовать по другому до 111 символов.
Но не как не пойму что тут еще можно сократить или как можно еще короче реаззовать?

За помощь буду благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2012, 11:57     Проверка равенства символов. Оптимизировать код
Посмотрите здесь:

C++ Помогите оптимизировать код
Оптимизировать код и обьяснить с матрицами. C++
C++ Помогите оптимизировать код
Оптимизировать код оператор switch C++
C++ Как оптимизировать код?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nik Raider
28 / 28 / 7
Регистрация: 03.02.2012
Сообщений: 59
07.12.2012, 12:11     Проверка равенства символов. Оптимизировать код #2
Ну раз просто меньше символов, то имена файлов сделай проще i.txt и o.txt и вот -9 символов

Добавлено через 3 минуты
и зачем k[31] ? Это обязательно? Если может не двузначное, а однозначное, вот и еще 1 символ. Итого 111 =)
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.12.2012, 12:23     Проверка равенства символов. Оптимизировать код #3
На коленке
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <fstream>
 
int p; 
 
main()
{
    std::fstream I("input.txt"), O("output.txt", 2);
    char k[31]; 
    while(I >> k)
        p += *k == k[3];
    O << p;
}
Вижу еще 1 символ, но его открывать не буду.

Добавлено через 2 минуты
И еще один символ вижу. Замените while на for, возможно увидите.
Арсен_
 Аватар для Арсен_
2 / 2 / 0
Регистрация: 25.11.2012
Сообщений: 27
07.12.2012, 12:39  [ТС]     Проверка равенства символов. Оптимизировать код #4
Спасибо вам большое))

вот сократил до 13 символов

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <fstream>
 
int p;
 
main()
{
    std::fstream I("input.txt"), O("output.txt", 2);
    char k[50]; 
    for(;I >> k;)
         p += *k == k[3];
    O << p;
}
т.к я только учу с++, у меня возникло пару вопросов))

почему у нас все работает правильно при не инициализации переменной p?
И в вырожении p += *k == k[3]; где указатель на массив k, мы получаем нулевой элемент?

Еще как вы посоветовали, создавать массив напиример до 5 элементов, char k[5]; то у меня выдает ошибку.

Может надо как то построчно считывать по 5 символов?

Добавлено через 2 минуты
Цитата Сообщение от Nik Raider Посмотреть сообщение
Ну раз просто меньше символов, то имена файлов сделай проще i.txt и o.txt и вот -9 символов

Добавлено через 3 минуты
и зачем k[31] ? Это обязательно? Если может не двузначное, а однозначное, вот и еще 1 символ. Итого 111 =)
спасибо,
в сожелению задача проверяется сервером, а на сервере названия файлов input.txt/output.txt
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 12:39     Проверка равенства символов. Оптимизировать код #5
Цитата Сообщение от Арсен_ Посмотреть сообщение
Еще как вы посоветовали, создавать массив напиример до 5 элементов, char k[5]; то у меня выдает ошибку.
В строке от 1 до 30 символов.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.12.2012, 12:40     Проверка равенства символов. Оптимизировать код #6
Цитата Сообщение от Арсен_ Посмотреть сообщение
почему у нас все работает правильно при не инициализации переменной p?
Потому что она инициализирована. Все переменные в глобальной области видимости инциализированы их умолчательным значением, в данном случае нулем.
Цитата Сообщение от Арсен_ Посмотреть сообщение
где указатель на массив k, мы получаем нулевой элемент?
Имя массива - это указатель на его первый элемент. Разименовывая этот указатель, мы получаем его первый элемент.

Цитата Сообщение от Арсен_ Посмотреть сообщение
Может надо как то построчно считывать по 5 символов?
Нет, размер массива тут не играет роли. Подумайте, где можно объявить ваш массив, чтобы не ставить точку с запятой.
Арсен_
 Аватар для Арсен_
2 / 2 / 0
Регистрация: 25.11.2012
Сообщений: 27
07.12.2012, 12:47  [ТС]     Проверка равенства символов. Оптимизировать код #7
A ну даа, спасибо

C++
1
2
3
4
5
6
7
8
9
10
11
#include <fstream>
 
int p;
 
main()
{
    std::fstream I("input.txt"), O("output.txt", 2);
    for(char k[50];I >> k;)
         p += *k == k[3];
    O << p;
}
1 символ остался))

я вот подумал, если не использовать массив а 2 паремнных символьного типа,

тоесть char a,b; и первый символ считывать в "a" а второй в "b", или так не получиться?
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.12.2012, 12:52     Проверка равенства символов. Оптимизировать код #8
Цитата Сообщение от Арсен_ Посмотреть сообщение
тоесть char a,b; и первый символ считывать в "a" а второй в "b", или так не получиться?
не получиться

Цитата Сообщение от Арсен_ Посмотреть сообщение
1 символ остался))
Тут уже гадать бессмысленно, надо просто знать одну фишку, специфичную для студии.
Я вам ее не скажу, так как у меня в этой задаче 111 символов, и я не заинтересован в том, чтобы меня догоняли :)
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 12:54     Проверка равенства символов. Оптимизировать код #9
Цитата Сообщение от Арсен_ Посмотреть сообщение
спасибо,
в сожелению задача проверяется сервером, а на сервере названия файлов input.txt/output.txt
а ссыль можно? =)
Арсен_
 Аватар для Арсен_
2 / 2 / 0
Регистрация: 25.11.2012
Сообщений: 27
07.12.2012, 13:00  [ТС]     Проверка равенства символов. Оптимизировать код #10
> а ссыль можно? =) конечно) [нельзя]

Кликните здесь для просмотра всего текста
Левая рекурсия
(Время: 1 сек. Память: 16 Мб Сложность: 20%)
В теории формальных грамматик и автоматов (ТФГиА) важную роль играют так называемые контекстно-свободные грамматики (КС-грамматики). КС-грамматикой будем называть четверку, состоящую из множества N нетерминальных символов, множества T терминальных символов, множества P правил (продукций) и начального символа S, принадлежащего множеству N.

Каждая продукция p из P имеет форму A –> a, где A нетерминальный символ (A из N), а a – строка, состоящая из терминальных и нетерминальных символов. Процесс вывода слова начинается со строки, содержащей только начальный символ S. После этого на каждом шаге один из нетерминальных символов, входящих в текущую строку, заменяется на правую часть одной из продукций, в которой он является левой частью. Если после такой операции получается строка, содержащая только терминальные символы, то процесс вывода заканчивается.

Во многих теоретических задачах удобно рассматривать так называемые нормальные формы грамматик. Процесс приведения грамматики к нормальной форме часто начинается с устранения левой рекурсии. В этой задаче мы будем рассматривать только ее частный случай, называемый непосредственной левой рекурсией. Говорят, что правило вывода A –> R содержит непосредственную левую рекурсию, если первым символом строки R является A.

Задана КС-грамматика. Требуется Найти количество правил, содержащих непосредственную левую рекурсию.

Входные данные

Первая строка входного файла INPUT.TXT содержит количество n (1 <= n <= 1000) правил в грамматике. Каждая из последующих n строк содержит по одному правилу. Нетерминальные символы обозначаются заглавными буквами латинского алфавита, терминальные - строчными. Левая часть продукции отделяется от правой символами –>. Правая часть продукции имеет длину от 1 до 30 символов.

Выходные данные

В выходной файл OUTPUT.TXT выведите ответ на задачу.

Пример

Код
№	INPUT.TXT	OUTPUT.TXT
1	    3
        S->Sabc
        S->A
        A->AA	              2


там условие задачи очень сложно написано, мне пришлось более 10 раз перечитывать)) а решение простое.

> Тут уже гадать бессмысленно, надо просто знать одну фишку, специфичную для студии.
Я вам ее не скажу, так как у меня в этой задаче 111 символов, и я не заинтересован в том, чтобы меня догоняли


Вмысле для студии? на остальных компилях пахать не будет? А на сервере на студии задачи проверяются?

Можете пожалуйста сказать это фишку? даю слово не применять ее в данной задаче!
просто очень любопытно.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 13:14     Проверка равенства символов. Оптимизировать код #11
Цитата Сообщение от Арсен_ Посмотреть сообщение
а ссыль можно? =) конечно)
А ID задачи? Просто по приведенной ссылке нет задачи
Арсен_
 Аватар для Арсен_
2 / 2 / 0
Регистрация: 25.11.2012
Сообщений: 27
07.12.2012, 13:20  [ТС]     Проверка равенства символов. Оптимизировать код #12
просто скопируйсте и вставьте, ЗАДАЧА №387
Кликните здесь для просмотра всего текста
Левая рекурсия
(Время: 1 сек. Память: 16 Мб Сложность: 20%)
В теории формальных грамматик и автоматов (ТФГиА) важную роль играют так называемые контекстно-свободные грамматики (КС-грамматики). КС-грамматикой будем называть четверку, состоящую из множества N нетерминальных символов, множества T терминальных символов, множества P правил (продукций) и начального символа S, принадлежащего множеству N.

Каждая продукция p из P имеет форму A –> a, где A нетерминальный символ (A из N), а a – строка, состоящая из терминальных и нетерминальных символов. Процесс вывода слова начинается со строки, содержащей только начальный символ S. После этого на каждом шаге один из нетерминальных символов, входящих в текущую строку, заменяется на правую часть одной из продукций, в которой он является левой частью. Если после такой операции получается строка, содержащая только терминальные символы, то процесс вывода заканчивается.

Во многих теоретических задачах удобно рассматривать так называемые нормальные формы грамматик. Процесс приведения грамматики к нормальной форме часто начинается с устранения левой рекурсии. В этой задаче мы будем рассматривать только ее частный случай, называемый непосредственной левой рекурсией. Говорят, что правило вывода A –> R содержит непосредственную левую рекурсию, если первым символом строки R является A.

Задана КС-грамматика. Требуется Найти количество правил, содержащих непосредственную левую рекурсию.

Входные данные

Первая строка входного файла INPUT.TXT содержит количество n (1 <= n <= 1000) правил в грамматике. Каждая из последующих n строк содержит по одному правилу. Нетерминальные символы обозначаются заглавными буквами латинского алфавита, терминальные - строчными. Левая часть продукции отделяется от правой символами –>. Правая часть продукции имеет длину от 1 до 30 символов.

Выходные данные

В выходной файл OUTPUT.TXT выведите ответ на задачу.

Пример

№ INPUT.TXT OUTPUT.TXT
1 3
S->Sabc
S->A
A->AA 2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2014, 20:55     Проверка равенства символов. Оптимизировать код
Еще ссылки по теме:

C++ Нужно оптимизировать код
C++ Оптимизировать код
C++ Оптимизировать и минимализировать код

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

Или воспользуйтесь поиском по форуму:
костя666674555
-94 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 78
02.01.2014, 20:55     Проверка равенства символов. Оптимизировать код #13
почему неработает такой код?
C++
1
2
3
4
5
6
7
8
9
10
11
#include <fstream>
 
 
main()
{
int p;
    std::fstream I("input.txt"), O("output.txt", 2);
    for(char k[50];I >> k;)
         p += *k == k[3];
    O << p;
}
Yandex
Объявления
02.01.2014, 20:55     Проверка равенства символов. Оптимизировать код
Ответ Создать тему
Опции темы

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