注册 登录
编程论坛 C语言论坛

字符串字母大小写转换

黑暗骑士5D 发布于 2019-12-11 11:26, 2318 次点击
本题要求编写程序,对一个以“#”结束的字符串,将其小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其他字符不变输出。
输入格式:

输入为一个以“#”结束的字符串(不超过30个字符)。
输出格式:

在一行中输出大小写转换后的结果字符串。
输入样例:

Hello World! 123#

输出样例:

hELLO wORLD! 123


int main()
{
  char a[30];
  int i,num=0;
  for(i=0;a[i-1]!='#';i++)
    {scanf("%c",a[i]);
     num++;
    }
  for(i=0;i<num;i++)
  {
      if(a[i]>='A'&&a[i]<='Z')
        a[i]+=32;
      else if(a[i]>='a'&&a[i]<='z')
        a[i]-=32;
  }
  for(i=0;i<num-1;i++)
    printf("%c",a[i]);
}
我这个有啥问题
5 回复
#2
rjsp2019-12-11 11:45
  for(i=0;a[i-1]!='#';i++)
#3
宁缺T2019-12-11 14:41
scanf("%c",&a[i]);
#4
纯蓝之刃2019-12-11 14:43
scanf("%c",&a[i]);


建议你最好这样使用,因为正如二楼所说的当i=0时,a[-1]是个随机数。

#include <stdio.h>

int main()
{
    char a[30];
    int i,num=0;

    while((a[num++]=getchar())!='#');

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

    for(i=0;i<num-1;i++)
        printf("%c",a[i]);

    return 0;
}

我发现我还是发不出去代码贴!!!
#5
黑暗骑士5D2019-12-11 16:24
回复 2楼 rjsp
那应该怎么修改呢
#6
rjsp2019-12-11 17:10
以下是引用黑暗骑士5D在2019-12-11 16:24:27的发言:

那应该怎么修改呢

4楼不是写给你了吗?

你想让我也写一个?
#include <stdio.h>

int main( void )
{
    char a[32];
    scanf( "%[^#]%*c", a );

    for( size_t i=0; a[i]!='\0'; ++i )
    {
        if( a[i]>='A' && a[i]<='Z' )
            a[i] += 'a'-'A';
        else if( a[i]>='a' && a[i]<='z' )
            a[i] -= 'a'-'A';
    }

    puts( a );
}

1