gpt4 book ai didi

即使使用 strupr 也会将大小写转换为小写

转载 作者:行者123 更新时间:2023-11-30 14:47:20 25 4
gpt4 key购买 nike

我编写了这个程序,用于将给定输入的元音转换为大写,将辅音转换为小写。一旦字符串转换为大写,它就会转换为小写,但我没有使用 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);
}

考虑输入aaasa。第一个a是con到upr,第二个a是con到lwr(因为字符串在第一个循环中转换为大写,我没有将其更改为小写。),第三个a到upr,s到lwr,第四个a到upr。通过将 strlwr(a) 放在第 456 行可以解决这个问题,但是我想知道为什么大写被转换为小写,即使我没有在 if else block 中的任何地方使用 strlwr 。请回答这个问题。提前谢谢您。

最佳答案

为了更改单个字符,无需使用 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];
}

关于即使使用 strupr 也会将大小写转换为小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51428208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com