【发布时间】:2018-07-19 16:58:50
【问题描述】:
我编写了这个程序来为给定的输入将元音转换为大写,将辅音转换为小写。一旦将字符串转换为大写,它就会转换为小写,但我没有使用 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 块中的任何地方使用 strlwr 也将大写字母转换为小写字母。 请回答这个问题。提前谢谢。
【问题讨论】:
-
strlwr/strupr不是标准函数,您甚至不需要它们,因为您需要转换字符,而不是字符串。幸运的是,它有标准功能 -toupper和tolower。 -
不要使用
gets。永远不要使用gets。它是dangerous function,因此已从 C 语言中删除。使用例如fgets代替。
标签: c string case-conversion