в полученной строке поменять регистр

Общая задача состояла: а)Отредактировать заданное предложение текста, удаляя из него все слова из нечетным количеством букв и переворачивая слова из парной. Например: HOW DO YOU DO → OD OD. б) Заменить регистр букв на противоположный. С задачей а я справилась, подскажите как реализовать б

#include <stdio.h>
#include <string.h>
#define isAlpha(ch)  ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')))
#define n    80
int main()
{

    char buf[n];
    char *first, *second;
    int len;
    printf("Enter a string: ");
    scanf("%[^\n]s", buf);
    first = buf + strlen( buf ) - 1;

    while( first > buf )
    {
        while( first != buf && !isAlpha( *first )
               first--;

        second = first;
        while( first > buf &&isAlpha( *first )
               first--;

        len = (second - first );
        if( first == buf && isAlpha( *first )
            len++;

            if( ( len % 2 ) == 0 )
                while( second >= first )
                    putchar( *second-- );
    }

    
    return 0;
}

Ответы (1 шт):

Автор решения: Daniil Loban

В общем случае решение заключается в том что мы принимаем за факт, что буквы находятся в массиве символов ASCII c 65 по 122 символ ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz точнее мы имеем 2 диапазона от 65 до 90 и от 97 до 122

Дельта между позициями букв одинакова так как не смотря на то что буквы прерываются символами они и в первом и во втором случае идут в том же порядке. дельта составляет 32 т.е. для конвертации достаточно либо прибавить либо отнять дельту, разумеется лучше еще делать проверку входящего параметра на попадание в диапазон букв.

char flip(char c){
    int delta = (int)'A' - (int)'a'; // -32;
    return (char)(c + (c > 'Z' ? delta : -delta));    
}
→ Ссылка