前几天看了关于字符串的几个代码,但是一直都感到不是很明白,代码如下: 代码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,而是应该理解成循环到字符串的结束。