| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 564 人关注过本帖
标题:感觉很神奇,变换一下得到的结果一样,但我想不出其中的原因
取消只看楼主 加入收藏
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:6 
感觉很神奇,变换一下得到的结果一样,但我想不出其中的原因
#include<stdio.h>
#include<ctype.h>
int main()
{
    char str[100];
    int i;
    int a=0;             //判断字母函数
    printf("输一个字符串:\n");
    gets(str);
    for(i=0;str[i];i++)
    {
        if(isalpha(str[i]))
            a+=1;
    }
    printf("字母有%d个\n",a);
    return 0;
}
以上是第一个代码,下面是另外一个代码:

#include<stdio.h>
#include<ctype.h>
int main()
{
    char str[100]={"\0"};
    int i;
    int a=0;             //判断字母函数
    printf("输一个字符串:\n");
    gets(str);
    for(i=0;i<100;i++)
    {
        if(isalpha(str[i]))
            a+=1;
    }
    printf("字母有%d个\n",a);
    return 0;
}
这两个代码有不同之处,第一个代码的str[100]没有初始化,for语句的判断式为str[i];第二个代码的str[100]初始化为str[100]={"\0"},for语句的判断式为i<100,就这两个地方我不明白,实际上两者运行后得到的结果是一样的,同样可以测出字符串有多少个字母,求解释
另外,还有一点不明白的是:
#include<stdio.h>
#include<ctype.h>
int main()
{
    char str[100]={"\0"};
    int i;
    int a=0;             //判断字母函数
    printf("输一个字符串:\n");
    gets(str);
    for(i=0;i<100;i++)
    {
        if(isalpha(str[i])!=0)
            a+=1;
    }
    printf("字母有%d个\n",a);
    return 0;
}加颜色的那部分,本来我是这样的:if(isalpha(str[i]))这样写可以计算出字符串的字母数,但是我要是改为if(isalpha(str[i])==1),就不能输出正确结果了,但再换回if(isalpha(str[i])!=0)却又能输出正确结果,为什么?我个人认为==1与!=0的效果应该是一样的啊?为什么却无法实现呢?

[ 本帖最后由 love云彩 于 2012-12-23 15:02 编辑 ]
搜索更多相关主题的帖子: 字符串 return include 字母 
2012-12-23 14:52
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
回复 3楼 TonyDeng
这样初始化不行吗?但运行能得到结果哦,还有帮我解决一下for语句中的判断式为什么能用str[i]表示吧

思考赐予新生,时间在于定义
2012-12-23 15:43
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
回复 5楼 TonyDeng
还有一个问题哦,就是那个if(isalpha(str[i])),它这样可以输出结果了,但换成这样if(isalpha(str[i])!=0)也行,我觉得!=0与==1的效果应该是一样的,就换成if(isalpha(str[i])==1)来试试,结果却不行,怎么回事呢

思考赐予新生,时间在于定义
2012-12-23 16:47
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
以下是引用TonyDeng在2012-12-23 15:18:46的发言:

顺便说一下,你第二个代码下面的初始化语法是错的:
char str[100]={"\0"};

你说我这样的初始化是错误的,那应该怎样初始化呢?是不是char str[100]={'\0'}这样?

思考赐予新生,时间在于定义
2012-12-23 18:47
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
#include<stdio.h>
#include<ctype.h>
int main()
{
    char str[100];
    int i;
    int a=0;             //判断字母函数
    printf("输一个字符串:\n");
   scanf("%s",str);
    for(i=0;str[i];i++)
    {
        if(isalpha(str[i]))
            a+=1;
    }
    printf("字母有%d个\n",a);
    return 0;
}我用scanf来输入字符串,如果我输入的字符串是含有空格的,比如下面的截图
图片附件: 游客没有浏览图片的权限,请 登录注册

abcdef ghi之间有一个空格,最后的结果是6个字母,我可不可以就这样认为使用scanf输入一个字符串,不能输入'\0'空格符号,这样的说法正确吗?

思考赐予新生,时间在于定义
2012-12-23 18:53
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
#include<stdio.h>
#include<ctype.h>
int main()
{
    char str[100];
    int i;
    int a=0;             //判断字母函数
    printf("输一个字符串:\n");
    for(i=0;i<15;i++)
   scanf("%c",&str[i]);
    for(i=0;i<15;i++)
    {
        if(isalpha(str[i]))
            a+=1;
    }
    printf("字母有%d个\n",a);
    return 0;
图片附件: 游客没有浏览图片的权限,请 登录注册

版主,你再看看这种情况,我将本来的scanf()改为for(i=0;i<15;i++)  scanf("%c",&str[i]);然后将for语句后面的判断条件改为i<15;运行的时候,我就先输入“abc de4f”,然后我一共按了7次enter键,最后还能输出正确的结果哦,这个问题是不是很纠结?这能说明scanf能输入一个空格符号?但我也觉得有点奇怪,为什么要按了那么多次才有结果出来呢?没试过这种情况

思考赐予新生,时间在于定义
2012-12-23 20:42
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
如果我这样写,scanf("%s",str),这样如果有一个空格符号的话,空格符号后面的字符串肯定不会被列入了,如果我改为for(i=0;i<15;i++) scanf("%c",&str[i])来逐个输入字符的话,就比如输入“abc de4f”,这中间的空格符号应该也被输入字符组里面了吧,但运行的时候,却要按7次才会有结果出来,好郁闷

思考赐予新生,时间在于定义
2012-12-23 20:47
快速回复:感觉很神奇,变换一下得到的结果一样,但我想不出其中的原因
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037201 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved