Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1021664
  • 博文数量: 297
  • 博客积分: 11721
  • 博客等级: 上将
  • 技术积分: 3431
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-25 10:21
文章分类

全部博文(297)

文章存档

2016年(9)

2011年(71)

2010年(137)

2009年(80)

分类: 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这个数组下标来控制输出的范围,指针本身不能很好解决这个问题。
字符数组中每一个元素都是一个字符,这点是很需要明确的。所以取字母也好,取数字也好,都要注意方法。

阅读(563) | 评论(0) | 转发(0) |
0

上一篇:gdb命令详解

下一篇:查找debian源

给主人留下些什么吧!~~