【问题标题】:case conversion to lowercase even on using strupr即使使用 strupr 也将大小写转换为小写
【发布时间】: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 不是标准函数,您甚至不需要它们,因为您需要转换字符,而不是字符串。幸运的是,它有标准功能 - touppertolower
  • 不要使用gets。永远不要使用gets。它是dangerous function,因此已从 C 语言中删除。使用例如fgets 代替。

标签: c string case-conversion


【解决方案1】:

不要使用 strlwr/strupr,而要更改单个字符,只需从 char 中添加/减去 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];
}

【讨论】:

  • thanx bro!但我想知道为什么即使使用 strupr 也会将大写元音转换为小写。
  • 即使最后一个字符是小写元音也会发生这种情况吗?
猜你喜欢
  • 2011-07-21
  • 2014-11-07
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2013-04-21
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多