Язык Си в примерах/Верхний регистр

Материал из Викиучебника

Перейти к: навигация, поиск
Язык Си в примерах

  1. Компиляция программ
  2. Простейшая программа «Hello World»
  3. Учимся складывать
  4. Максимум
  5. Таблица умножения
  6. ASCII коды символов
  7. Верхний регистр
  8. Скобочки
  9. Факториал
  10. Степень числа
  11. Треугольник Паскаля
  12. Корень уравнения
  13. Система счисления
  14. Сортировка
  15. Библиотека complex
  16. Сортировка на основе qsort
  17. RPN калькулятор
  18. RPN калькулятор на Bison
  19. Простая грамматика
  20. Задача «Расчёт сопротивления схемы»
  21. Простая реализация конечного автомата
  22. Использование аргументов командной строки
  23. Чтение и печать без использования stdio

[править] Перевод символов в верхний регистр

< Язык Си в Примерах

В следующей программе введенная пользователем строчка переводится в верхний регистр, то есть маленькие буквы становятся заглавными. Заглавные буквы и символы, не являющиеся латинскими буквами не меняются.

Обратите внимание на то, что с символами (переменными типа char) можно оперировать как с числами. В частности 'Z' -'A' есть число, равное разности ASCII кодов символов 'A' и 'Z', то есть 26 — число букв в латинском алфавите. Символы можно также сравнивать друг с другом при этом сравниваются соответствующие им ASCII коды.

 #include <stdio.h>
 #define N 100
 int main() {
    char a[N];
    int i;
    scanf ("%s", a);
    for(i = 0; a[i] != 0; i++) {
       if( a[i] <= 'z' && a[i] >= 'a') {
          a[i] += 'A' - 'a';
       }
    }
    printf ("%s", a);
    return 0;
 }

При решении практических задач функцию перевода строчки в верхний регистр писать самому не надо. Это стандартная функция, которая есть в библиотеках различных языков программирования. В библиотеке string реализованы функции strlwr и strupr, которые переводят строчки в нижний и в верхний регистр. Соответствующие функции для преобразования одного символа tolower и toupper определены в библиотеке ctype.

[править] Примечание

Приведённая выше программа содержит потенциальную уязвимость типа «переполнение буфера».

Ниже приведена программа, которая использует функцию tolower библиотеки ctype и переводит строчку в нижний регистр.

 #include <string.h>
 #include <stdio.h>
 #include <ctype.h>
 int main() {
    int length, i;
    char string[] = "ThIs Is A sTrInG";
    length = strlen(string);
    for (i = 0; i < length; i++) {
        string[i] = tolower (string[i]);
    }
    printf ("%s\n", string);
    return 0;
 }

[править] См. также