如何通过更改其ascii值来更改变量的值?

时间:2017-01-07 14:08:03

标签: c

  /*change the case of each alphabet in this String. */ 
 #include <stdio.h>
 #include<string.h>

int main()
{
char a[100],b,c;
int i;
scanf("%s",a);
int len=strlen(a);
for(i=0;i<len;i++)

    {    c=a[i];
         b='c';
        if(b<91)
         b=b+32;
        else if(b>96)
          b=b-32;
        'c'=b;   /*error*/
         a[i]=c;
}

printf("%s",a);    

 return 0;
}

我想将string的每个变量更改为相应的大写或小写(例如input:adsE                             输出:ADSe) 所以我通过改变变量的ASCII值来尝试它, 但我无法将新的ASCII值放回原始变量。 我应该怎么做?

2 个答案:

答案 0 :(得分:1)

如果你

#include <ctype.h>

然后您可以使用toupper()tolower()函数将字符转换为大写/小写。您也可以使用isupper()islower()来测试案例。

例如:

if      (islower(ch)) ch = toupper(ch);
else if (isupper(ch)) ch = tolower(ch);

答案 1 :(得分:1)

首先,变量c和字符'c'无关。您可以分配c c = 'a',但无法分配到'c' - 就像您无法分配给某个号码一样,例如9 = 42会失败。

但是,不需要使用变量bc。您只需直接在a上操作即可。像

    if (a[i] < 91)
         a[i] = a[i] + 32;
    else if (a[i] > 94)    // Hmm, should this be 96?
        a[i] = a[i] - 32;

您可以改进代码,如:

    if ((a[i] >= 'A') && (a[i] <= 'Z'))
         a[i] = a[i] + 32;
    else if ((a[i] >= 'a') && (a[i] <= 'z'))
        a[i] = a[i] - 32;