Преобразование регистра в нижний регистр даже при использовании Strupr

Я написал эту программу для преобразования гласных в верхний регистр и согласных в нижний регистр для данного ввода. Как только строка преобразуется в верхний регистр, она преобразуется в нижний регистр, но я не использовал strlwr.

void main()
{
    char a[20], b[20], c[10] = "aeiou";
    int t, n;
    printf("enter the word");
    gets(a);
    strlwr(a);
    n = strlen(a);
    for(t = 0; t<n; t++)
    {
        if(a[t] == c[0] || a[t] == c[1])
        {
            strupr(a);
        }

        else if(a[t] == c[2] || a[t] == c[3])
        {
            strupr(a);
        }
        else if(a[t] == c[4])
        {
            strupr(a);
        }
        else
        {
            strlwr(a);
        }
        b[t] = a[t];
        /*line 456*/
    }
    b[n] = '\0';
    printf("%s", b);
}

рассмотрим вход аааса. 1-й а соответствует conr,2-й а соответствует lwr(поскольку строка преобразуется в верхний в 1-м цикле, а я не изменил ее в нижний регистр.),3-й a в upr, s в lwr, 4-й a в upr. Это решается размещением strlwr(a) в строке 456, но я хочу знать, почему заглавные буквы преобразуются в строчные, хотя я нигде не использовал strlwr в блоках if else. Пожалуйста, ответьте на это. Спасибо заранее.

1 ответ

Вместо использования strlwr/strupr для изменения отдельных символов просто добавьте / вычтите 32 от символа для соответствующих операций.

Итак, если вы считаете следующую строку:

char x = 'A';

затем,

x += 32;

установит значение x в a,

РЕДАКТИРОВАТЬ

Весь ваш for цикл будет:

for(t=0;t<n;t++)
{
    int i;
    int vowel = 0;
    for(i=0;i<5;i++)
    {
        if(a[t]==c[i])  //Lowercase vowels
        {
            a[t]-=32;
            vowel = 1;
            break;
        }
        else if((a[t]+32)==c[i])  //Uppercase vowels
        {
            vowel = 1;
            break;
        }
    }
    if(!vowel && a[t]<97)
        a[t]+=32;

    b[t]=a[t];
}
Другие вопросы по тегам