- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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 <stdio.h>
main()
{
char old[1000];
char new[1000];
int i; /*счетчик цикла длинны массива */
int z; /*счетчик нового массива */
int l; /*длинна массива */
int c; /*член массива */
l = 0;
z = 0;
printf
("программа удаления повторяющихся символов\n");
printf
("введите последовательности символов, из которых нужно удалить повторяющиеся, по окончании вводна нажмите Ctrl+D \n");
while ((c = getchar()) != EOF) {
old[l] = c;
l++;
}
old[l] = 0;
printf
("Введите символ, который нужно удадить как повторяющийся\n");
c = getchar();
for (i = 0; i < l; i++) {
if (old[i] != c) {
new[z] = old[i];
z++;
} else if (old[i] == c && old[i + 1] != c) { /*один символ из повторяющихся */
new[z] = old[i];
z++;
}
}
new[z] = 0;
printf("%s\n", new);
printf("*end");
}
new -- это ключевое слово в ++, не используй в названиях.
И задание какое-то странное...
http://netlib.narod.ru/library/book0003/ch01_09.htm
про i = ему значение 0 присваивается в цикле for
Это не С++ а просто "СИ".
Как видишь, оно всё равно подсветилось. И код на C должен компилироваться в C++.
Но если даш ссылку на ресурс где эта "культура кода" описывается - я буду благодарен конечно.
Конкретно в привиденных (по ссылке что я дал) примерах нет "инициализации при объявлении", может позже будет - я пока что простые примеры разбираю.
Это было бы страшно, еслии бы I было бы счетчиком и увеличивалось посредстом i++ - если где-то раньше не написать i=0; то увеличения счетчика не произойдет.
Тут же - имеет место быть цикл for.
Это что касается присвоения.
А что касается инициализации - мне пока не ясно, если честно :) - я ж тока начал СИ изучать :)
ЗЫ: за ссылку спасибо - потом гляну на досуге.
>> если где-то раньше не написать i=0; то увеличения счетчика не произойдет
Произойдет ошибка (если компилятор не отругает). Переменная всегда равна чему-то, а если не присвоишь не сможешь даже догадаться, чему.
А вообще, не сюда наверно тебе пока.
Мне очень понравилось в свое время.
Лучше определять их ближе к месту использования.
И тут же инициализировать.
А лишнее присваивание - не лучший вариант.
Скажем в Си я напишу:
, но никогда
>И код на C должен компилироваться в C++.
В общем случае - не должен.
Или в плюсах только такое появилось? Насколько я знаю, присваивание при объявлении всего лишь указывает, чем заполнять (на подобие аргумента конструктора). Не?
> Лучше определять их ближе к месту использования.
Спорный вопрос. Имхо лучше пусть код читабельный будет (типа иногда в порядки проще смотрится, когда переменные в начале, например, функции объявлены (ну в той же области видимости понятно)).
> но никогда
> int i=0;
> for( i=0
Я ебанутый чтоли?)) Конечно не надо так делать, бред же. Я про то, что я бы написал
for (int i=0;i<N;++i)
либо
int i = 0;
for(;i<N;++i)
но болтаться int i; непонятно с чем я бы не стал.
> В общем случае - не должен.
Подумал и согласился.
Конечно
> for (int i=0;i<N;++i)
В классических сях так нельзя
>int i = 0;
>for(;i<N;++i)
Теряется связь с инициализатром цикла
А вот это
>> Теряется связь с инициализатром цикла
я не понял. Логически чтоли или так тоже нельзя?
Логически. Писать можно как угодно, хоть for(;;)
но тогда зачем использовать цикл for
если он используется как цикл while:
если учишься СИ, попробуй оптимальней переписать эту программу:
вместо второго буффера заведи переменную сдвига (int shift = 0;)
сивмол копируется на итое минус сдвиг место, при встрече символа повтора сдвиг инкрементируется
- сначала решается задача "влоб" (без какой либо оптимизации или мысли о том как оно там будет выполнятся)
- потом уже объясняется как оно выполняется, что такое память, и способы оптимизации -- задача решается чуть более оптимальным путём...
еси с самого первого урока учить всем тонкостям - у человечка забьётся стек мыслями: почему так? что это такое? как оно так?..
и сработает механизм защиты от переполнения: который будет блокировать всю поступающую информацию...
и у человека сложится впечатление: "этот язык - это просто писдец какой-то... нуивонах, лучше буду ПХП учить..."
есть ошибка связанная с переполнением:
когда i == ARRAY_SIZE - 1 и old[i] == c, будет обращение за пределы массива
Пашолты!!11
С чего так подумал?
Женя Кубышин на пикрелейтед обдумывает "Концепцию интерфейса редактирования профайла для сайта brainity.ru" (с) http://kubyshin.ru/
выдержка из его комента:
Вы говорите что HTML невозможно программировать. По-моему вы просто жутко наелись конфет...
Этот язык заводится из простого текстового редактора и для его исполнения нужен только веб-браузер, к вашему сведению сидя на Windows я писал в блокноте копию рабочего стола (писал например в функцию кнопки пуск т.е. ее смена на более светлую картинку и обратно, так же меню картиночное высвечивалось и прочее) Язык вполне удобный, но его не совершенство это мину
на чистом хтмл (путь даже +цсс) максимум что ты напишешь - набор страничек с картинками, текстом и выпадающими списки ссылкок...
при этом Каждая такая страничка и все её элементы -- Статичны: доступны Только для чтения (чтобы изменить что-либо, необходимо править "исходники" -- т.е. языком программирования ХТМЛ невозможно назвать)
или ВБСкрипт, ЖСкрипт, ЖаваСкрипт и сторонние объекты/аплеты к Возможностям хтмл?..
http://ru.wikipedia.org/wiki/SEX
http://ru.wikipedia.org/wiki/Зоофилия
не готового к конструктивной беседе и защите своего мнения,
которому хватает сил только мышкой покликать.
Такую поебень писать..
Ну ка нах съебались учиться студентики..
Кто тут напишет тот пидорас!
Кто поставит мне минус, тот яйцетряс!