в полученной строке поменять регистр
Общая задача состояла: а)Отредактировать заданное предложение текста, удаляя из него все слова из нечетным количеством букв и переворачивая слова из парной. Например: 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 шт):
В общем случае решение заключается в том что мы принимаем за факт, что буквы находятся в массиве символов 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));
}