C语言字符串首字母大小写转换

有这样一个输出结果:
输入1:Ase wew
输出1:ase wew
输入2:asweweq
输出2:Asweweq
为此编写的程序为:
#include<stdio.h>
#include<string.h>
main()
{ int i,j;
char a[10],b[10];
gets(a);
gets(b);
if(a[0]>='A' && a[0]<'a')
{
for(i=0;i<10;i++)
{
a[0]=a[0]+32;
printf("%c",a[i]);
}
}
if(a[0]>='a' && a[0]<='z')
{
for(i=0;i<10;i++)
{
a[0]=a[0]-32;
printf("%c",a[i]);
}
}
if(b[0]>='A' && b[0]<'a')
{
for(i=0;i<10;i++)
{
b[0]=b[0]+32;
printf("%c",b[i]);
}
}
if(b[0]>='a' && b[0]<='z')
{
for(i=0;i<10;i++)
{
b[0]=b[0]-32;
printf("%c",b[i]);
}
}
}
运行程序后有点小问题,另询问是否有更简便的编程方法,不胜感激!
为什么会出现这个符号,程序出错在何处?

基本也就只能这么做了,不过有问题是不是这个?
if(a[0]>='A' && a[0]<'a')
改成
if(a[0]>='A' && a[0]<='Z')
就好了?
----------------------------------------------------
这个问题是这里引起的:
for(i=0; i<10 ;i++)
因为字串默认是在\0就终止了,但是你非得把10个全都安%c输出,结果当然会比较诡异。
改成:
for(i=0;i<10 && a[i]!='\0';i++) //(或者b[i])
就可以了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-25
关键你没有理解字符数组和字符串的区别,你用的是字符数组,输入字符串,字符数组可用数组下标控制,而字符串要用结尾的结束字符‘\0’控制,具体的你去看看书吧,将你的代码与下面的代码进行对比,你就会发现错在哪了
#include
#include
main()
{
char
a[10],b[10];
gets(a);
gets(b);
if(a[0]>='a'&&a[0]<='z')
a[0]-=32;
else
if(a[0]>='A'&&a[0]<='Z')
a[0]+=32;
if(b[0]>='a'&&b[0]<='z')
b[0]-=32;
else
if(b[0]>='A'&&b[0]<='Z')
b[0]+=32;
puts(a);
puts(b);
}
第2个回答  2020-04-20
基本也就只能这么做了,不过有问题是不是这个?
if(a[0]>='A'
&&
a[0]<'a')
改成
if(a[0]>='A'
&&
a[0]<='Z')
就好了?
----------------------------------------------------
这个问题是这里引起的:
for(i=0;
i<10
;i++)
因为字串默认是在\0就终止了,但是你非得把10个全都安%c输出,结果当然会比较诡异。
改成:
for(i=0;i<10
&&
a[i]!='\0';i++)
//(或者b[i])
就可以了。
第3个回答  2010-09-18
关键你没有理解字符数组和字符串的区别,你用的是字符数组,输入字符串,字符数组可用数组下标控制,而字符串要用结尾的结束字符‘\0’控制,具体的你去看看书吧,将你的代码与下面的代码进行对比,你就会发现错在哪了
#include<stdio.h>
#include<string.h>
main()
{
char a[10],b[10];
gets(a);
gets(b);
if(a[0]>='a'&&a[0]<='z')
a[0]-=32;
else if(a[0]>='A'&&a[0]<='Z')
a[0]+=32;
if(b[0]>='a'&&b[0]<='z')
b[0]-=32;
else if(b[0]>='A'&&b[0]<='Z')
b[0]+=32;
puts(a);
puts(b);
}
第4个回答  2010-09-17
做个循环即可
输入后逐个判断数组中的字母,如果不是字母不处理,如果是小写字母不处理,如果是大写减32。

你没有判断字符是否是字母,应该把有效的字符限定在字母的范围内,否则应该输出一个指定的标示错误的字符
相似回答