#c
#c
Вопрос:
Я должен написать функцию, которая удаляет каждый символ из текста, который не является числом, изменяет первую букву каждого слова на заглавную букву и изменяет остальные буквы на маленькие буквы.
Проблема в том, что :
- Я не могу использовать ctype, stdlib и библиотеку строк
- Я могу использовать только scanf, когда хочу ввести
- Я не могу использовать оператор [], кроме объявления массива
- Я не могу использовать цифры, кроме 0 и 1
Обычно это было бы легко, но с такими условиями я понятия не имею, как это сделать. Я новичок в строках, не будь суровым :).
Комментарии:
1. это звучит как проблема домашнего задания. Что вы пробовали до сих пор?
2. Возможно, вы захотите посмотреть на разницу в значениях ASCII для строчных и прописных символов, поскольку она постоянна. Невозможность использовать цифры странно, но вы могли бы выразить эту разницу как
char
3. «функция, которая удаляет каждый символ из текста, который не является числом», тогда как вы должны «изменять первую букву каждого слова на заглавную букву и изменять остальные буквы на маленькие буквы»?
4. Проблема в том, что обычно я выполняю упражнения такого типа с кодом acii. Но здесь я понятия не имею, даже как это начать. @ReticulatedSpline Как я могу выразить 32 как символ без использования 3 и 2?
5. Ограничение на оператор [] означает, что вам нужно использовать указатель для обхода массива, например
for (ptr = input; *ptr != ''; ptr )
Ответ №1:
Может быть, попробуйте сделать несколько таких макросов:
#define IS_UPPER(c) ( (c) >= 'A' amp;amp; (c) <= 'Z' )
#define IS_LOWER(c) ( (c) >= 'a' amp;amp; (c) <= 'z')
#define TO_UPPER(c) ( (c) -= ('a' - 'A'))
#define TO_LOWER(c) ( (c) = ('a' - 'A'))
#define IS_ALPHA(c) ( IS_UPPER(c) || IS_LOWER(c) )
И посмотрите, сможете ли вы заставить что-то работать
void homework(char * txt)
{
while(*txt != NUL)
{
/* do some stuff */
txt ;
}
}