Chinaunix首页 | 论坛 | 博客
  • 博客访问: 74959
  • 博文数量: 26
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 270
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-19 08:55
文章分类

全部博文(26)

文章存档

2011年(1)

2009年(10)

2008年(15)

我的朋友
最近访客

分类: C/C++

2008-09-16 19:51:42

前几天看了关于字符串的几个代码,但是一直都感到不是很明白,代码如下:
代码1: [复制]
#include
#include
int main()
{
        char s[]="123asd0AS4356666D$%^";
        int i;
        for (i=0;s[i]!=0;i++)   //如果数组中当前的字符存在则进行循环
        {
                  if(isdigit (s[i]))    //函数isupper是用于测试一个字符是不是大写字符
                {
                        printf("%c is a number .\n",s[i]);//如果是大写字符则输出这个字符
                }
        }
        return 0;
}

运行结果如下:
1 is a number .
2 is a number .
3 is a number .
0 is a number .
4 is a number .
3 is a number .
5 is a number .
6 is a number .
6 is a number .
6 is a number .
6 is a number .

代码2:#include
#include
int main ()
{
        char s[]="123a,.;sd0ASD$^";
        int i;

        for (i=0;s[i]!=NULL;i++)   //for 循环中,判断s[i]是否为空 作为循环的条件。
       {
                if (ispunct (s[i]))// ispunct函数可以测试一个字符是否为标点符号或者特殊符号。
                {
                        printf("%c is a punct.\n",s[i]);    //如果是符号则输出结果
                }
        }
        return 0;
}

结果如下:

, is a punct.
. is a punct.
; is a punct.
$ is a punct.
^ is a punct.


比较以上两个代码中的for循环部分,第一个代码的循环语句为for (i=0;s[i]!=0;i++), 第二个代码的循环部分是  for (i=0;i!=NULL;i++) .那么这两个语句的到底有什么区别呢?
    一开始我是这样理解的,for (i=0;s[i]!=0;i++)中是碰到字符数组中的元素为0时则退出,也就是说在s[]中的排在0后面的元素都不会显示的,但是结果却是全部显示,后来我看了第二个代码,这两个代码有相似的地方,不同的只有判断语句中的NULL和0不同.
  最后经过别人的指导我才明白,其实第一个代码中的0是NULL的ASCII码。也就是说这里的0就不能理解成数字0,而是应该理解成循环到字符串的结束。
阅读(753) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~