C语言大小写字母转换

#include<stdio.h>voidmain(){charc1,c2;c1=getchar();printf("%c,%d\n",c1,c1);c2=c1+32;p... #include<stdio.h>
void main()
{
char c1,c2;
c1=getchar();
printf("%c,%d\n",c1,c1);
c2=c1+32;
printf("%c,%d\n",c2,c2);
}

教教我,解释下。还有我看不到上面代码根据什么来实现大小写转换的
展开
 我来答
赞的都帅
高粉答主

推荐于2019-10-03 · 说的都是干货,快来关注
知道小有建树答主
回答量:150
采纳率:100%
帮助的人:4.7万
展开全部

就是ASCII码的加减,字母的大写和小写的ASCII码的差值是一样的。

小写的字母ASCII码为 97('a')到 122('z'),转换成大写字母则ASCII减32,变成从65('A')到90('Z')

每个字母对应一个ascii码,查ascii码表就可以一目了然。输入字母,转换为int类型,看其值是在什么范围,就可以知道输入的是大写还是小写。

ASCII码:美国(国家)信息交换标准(代)码,一种使用7个或8个二进制位进行编码的方案,最多可以给256个字符(包括字母、数字、标点符号、控制字符及其他符号)分配(或指定)数值。ASCII码于1968年提出,用于在不同计算机硬件和软件系统中实现数据传输标准化,在大多数的小型机和全部的个人计算机都使用此码。

ASCII码划分为两个集合:128个字符的标准ASCII码和附加的128个字符的扩充和ASCII码。

世镶柳009
2008-12-16 · TA获得超过3017个赞
知道答主
回答量:2928
采纳率:0%
帮助的人:2466万
展开全部
下面的代码演示了如何把字符串转换为全部大写、全部小写:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
// 把字符串转换为小写
char* str2lower(char *str)
{
char *p = str;
while (*str){
*str = tolower(*str);
str++;
}
return p;
}

// 把字符串转换为大写
char* str2upper(char *str)
{
char *p = str;
while (*str){
*str = toupper(*str);
str++;
}
return p;
}

/* 使用方法:
* command [A|a] string
* 参数说明:
* string是要转换的字符串
* [A|a]表示将字符串string转化为大写还是小写
*/
int main(int argc, char *argv[])
{
if (argc != 3 || strlen(argv[1]) != 1){
printf("usage: command [A|a] string\n");
return EXIT_FAILURE;
}

if (isupper(argv[1][0]))
printf("字符串的大写是:%s\n", str2upper(argv[2]));
else if (islower(argv[1][0]))
printf("字符串的小写是:%s\n", str2lower(argv[2]));
else
printf("原始的字符串是:%s\n", argv[2]);

return EXIT_SUCCESS;
}

编译该代码并运行,结果如下:

[287@~/c-cpp]$ gcc --std=c99 -o string-in-case string-in-case.c
[288@~/c-cpp]$ ./string-in-case A "This is a String."
字符串的大写是:THIS IS A STRING.
[289@~/c-cpp]$ ./string-in-case a "This is a String."
字符串的小写是:this is a string.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wssiqi
2010-09-15 · TA获得超过751个赞
知道小有建树答主
回答量:582
采纳率:100%
帮助的人:595万
展开全部
#include<stdio.h>
#include<string.h>
char a(char b[10])
{char c;
int i;
for(i=0;i<10;i++)
{
if(b[i]>='a' && b[i]<'A') //判断b[i]>'a' <'A'?
c=b[i]+32; //怎么都是加32,没有减的?
if(b[i]>='A' && b[i]<='Z') //即使上面都对了,把小写转换成大写了,在这句又会把大写转换成小写,应该用else if
c=b[i]+32; //怎么都是加32,没有减的?
return c;
}
}

main() //习惯不好,最好用int main(void) 原因以后学到再说
{char s[10]; //定义最大字符串长度,但get(s)输入的字符串长度不一定为10啊,所以你循环一直用10是不正确的
char c;
int i;
char a(char b[10]); //从这里看出你的子函数处理的是一个字符串,但下面你对这个字符串处理10次想干嘛?
gets(s); //想一个字符一个字符的处理就应该定义为char a(char b);
for(i=0;i<10;i++)
{
c=a(s); //c一个字符,a(s)处理的是一个字符串,处理一个字符串返回一个字符???
printf("%c",c);
}
}

修改版:
#include<stdio.h>
#include<string.h>
char a(char b)
{
if(b>='a' && b<='z')
{
b=b-32;
}

else if(b>='A' && b<='Z')
{
b=b+32;
}

return b;
}

int main(void)
{
char a(char b);

char s[10];
char c;
int i;

gets(s);
for(i=0;i<strlen(s);i++)
{
c=a(s[i]);
printf("%c",c);
}

return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天临契承
2017-08-31 · TA获得超过144个赞
知道答主
回答量:108
采纳率:0%
帮助的人:26.4万
展开全部
#include<stdio.h>
#include<stdlib.h>
void main()
{
char c;
scanf("%c",&c); //输入一个字母。
if ((c>='A')&&(c<='Z')) c+=32;
//判断是否为大写字母,是则转换为小写字母。
else if((c>='a')&&(c<='z')) c-=32;
//否则判断是否为小写字母,是则转换为大写字母。
else //否则,该字符不是字母,则输出“该字符不是字母”并结束程序。
{
printf("该字符不是字母\n");
exit(0);
}
printf("%c\n",c); //输出转换后的字母字符。
}---------------摘自 百度用户 锅钢5
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
翲燚
2017-08-02 · 知道合伙人软件行家
翲燚
知道合伙人软件行家
采纳数:436 获赞数:3030

向TA提问 私信TA
展开全部
//小写转大写
char aA(char a)
{
if (a >= 'a' && a <= 'z') return a - 'a' + 'A';
}

//大写转小写
char Aa(char A)
{
if (A >= 'A' && A <= 'Z') return A - 'A' + 'a';
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(36)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式