Поскольку альтернатива использованию regex Вы могла сделать это в Наборах:
from sets import Set
allowed_chars = Set('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-')
if Set(my_little_sting).issubset(allowed_chars):
# your action
print True
Вы можете попробовать решить некоторые проблемы в Project Euler . Первые несколько довольно просты, но они очень быстро становятся очень сложными. Я думаю, очень весело пытаться придумать самый короткий код или высокооптимизированный код для вычисления результатов (хотя я обычно использую C ++ или Python, а не C).
Одно из преимуществ проблем Project Euler заключается в том, что они ориентированы не только на язык; это проблемы, которые действительно заставляют задуматься о том, как найти элегантное решение сложных проблем.
И не забывайте code-golf .
Вы, вероятно, захотите отвечать только на вызовы (вопросы), у которых есть не менее 10 голосов.
$(selector)
.css({backgroundColor:"#f00"})
.animate({backgroundColor:"transparent"}, 2000, null,
function() { this.style.backgroundColor='transparent'; });
Не так чисто, потому что перед тем, как сделать его прозрачным, цвет становится белым, но это вариант.
Проблемы программирования17. Проект Эйлер
20. Онлайн-судья TJU
] 21. TopCoder
23. Шлюз учебных программ USACO
24. Онлайн-судья UVa
25. Ухань Онлайн-судья университета
26. Онлайн-судья ZJU
27. Z-Trening
Написать компилятор. Он не должен быть сложным или даже полным: вы можете создать простой язык (подмножество lisp?), А затем написать для него лексер. Убедитесь, что вы начали с формальной грамматики. Вы коснетесь управления памятью, арифметики указателей и других интересных вещей на C.
Я многое узнал об автоматах и проектировании компиляторов, написав простой синтаксический анализатор YAML на C ++.
Попробуйте книгу Денниса Ричи по языку программирования C. У книги неплохие задачи и читать тоже одно удовольствие :) Для более сложных задач вы можете пойти на конкурс побитового программирования
Ruby Quiz содержит 156 проблем с решениями. Но в Ruby, а не C. См. Дополнительную информацию в списке рассылки ruby-lang после того, как Джеймс перестал быть мастером викторин Ruby.
Хранилище поразрядных вещей Кнута может помочь в благородных поисках :)
Практикуйте код Katas , язык не имеет большого значения. Попытка разгадывать катас, которые вы уже сделали на другом языке, обычно довольно эффективна для изучения нового языка.
Создавайте библиотеки, реализующие сложные структуры данных , такие как двоичные деревья, словари и т. Д.
Вы всегда можете посетить Freshmeat , найти несколько интересующих вас проектов и посмотреть их систему отслеживания ошибок. Возьмите код и попытайтесь исправить несколько проблем.
Это помогает открытому исходному тексту, а также помогает вам привыкнуть к переходу к чужому коду в отладочных очках.