分类: LINUX
2010-02-22 15:17:33
一、 字符变量与字符数组
1. 字符变量的定义与使用
#i nclude "stdio.h"
void main()
{
char abc;
printf("input a char:");
scanf("%c",&abc);
printf("abc=%c",abc);
printf("\nabc=%d",abc);
}
运行结果:
input a char:d
abc=d
abc=100
注意char变量输出时如果是%c则输出字符本身,如果是%d则输出这个字符所对应的ASCII码的十进制值。
本例输入的d字符对应的值是100。
2. 字符数组的定义与使用
#i nclude "stdio.h"
void main()
{
char s[5]={'5','f','A','%','d'};
int i;
for(i=0;i<5;i++)
printf("%c ",s[i]);
printf("\n");
for(i=0;i<5;i++)
{
if(s[i]>='a' && s[i]<='z')
s[i]=s[i]-32;
}
for(i=0;i<5;i++)
printf("%c ",s[i]);
}
再分析一下字符数组的scanf读入功能,
#i nclude "stdio.h"
void main()
{
char s[3];
int i;
for(i=0;i<3;i++)
scanf("%c",&s[i]);
for(i=0;i<3;i++)
printf("s[%d]=%c\n",i,s[i]);
}
当输入为123时
输出:
s[0]=1
s[1]=2
s[2]=3
当输入为1 2 3时
输出:
s[0]=1
s[1]=
s[2]=2
为什么?
特别注意的是:空格也是一个字符。
实例:输入一串字符到数组中保存,按以下规则进行数据的加密:
(1) 如当前字符为数字,则把数字统统进行加5后对10取余。
(2) 如当前字符是字母,则用字母的后1个字母代替
(3) 其他字符不变。
如:输入的一串字符是:b#8yZ
则加密后的输出应是:c # 3 z A
参考程序6月10日左右附上。
#i nclude "stdio.h"
void main()
{
char s[5];
int i;
for(i=0;i<5;i++)
scanf("%c",&s[i]);
for(i=0;i<5;i++)
printf("%c ",s[i]);
printf("\n");
for(i=0;i<5;i++)
{
if(s[i]>='a' && s[i]<='y')
s[i]=s[i]+1;
else
if(s[i]=='z') s[i]='a';
if(s[i]>='A' && s[i]<='Y')
s[i]=s[i]+1;
else
if(s[i]=='Z') s[i]='A';
if(s[i]>='0' && s[i]<='9')
s[i]=(s[i]-'0'+5)%10+'0';
}
for(i=0;i<5;i++)
printf("%c ",s[i]);
}
3. 字符数组与指针
当然,我们也可以引入指针来记住字符数组的首地址,这跟普通int数组是类似的。
#i nclude "stdio.h"
void main()
{
char s[5]={'o','1','$','4'},*p;
p=s;
printf("%c",*(p+1));
p=p+3;
printf("%c",*p);
}
#i nclude "stdio.h"
void main()
{
char s[5]={'o','1','$','4','D'},*p;
int i;
for(i=0,p=s;i<5;i++)
printf("%c",*p++);
printf("\n");
for(i=0,p=s;i<5;i++)
{
if(*p>='A' && *p<='Z')
*p=*p+32;
printf("%c",*p);
p++;
}
}
在处理这样的数组时,我们会发现一个问题,如果使用指针,我们还是要依靠i这个数组下标来控制输出的范围,指针本身不能很好解决这个问题。
字符数组中每一个元素都是一个字符,这点是很需要明确的。所以取字母也好,取数字也好,都要注意方法。