Преобразование регистра в нижний регистр даже при использовании 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];
}