黑马程序员技术交流社区

标题: 基本类似的代码,为啥结果就是不一样,求解,问题出在... [打印本页]

作者: msm1374    时间: 2015-9-10 21:32
标题: 基本类似的代码,为啥结果就是不一样,求解,问题出在...
这是我自己敲的代码

int main(int argc, const char * argv[]) {
    //定义变量
    char str[100];
    int isWord = 0;
    int count = 0;  //统计单词个数
    printf("请输入一个字符串");
    gets(str);   
    for (int i=0; str != '\0'; i++) {
        if (isWord == 0) {
            str = str-32;  //变成大写
            count++;
            isWord = 1;
        } else if (str == ' ' ){
            isWord = 0;
        }
    }   
    printf("字符串%s,单词个数:%d\n",str,count);
    return 0;
}

当键盘输入  werwesdf  sdfjksldjf   时,打印的结果如下

请输入一个字符串warning: this program uses gets(), which is unsafe.
werwesdf  sdfjksldjf
字符串Werwesdf ,单词个数:2
Program ended with exit code: 0


下面是老师的代码

int main(int argc, const char * argv[]) {

    //定义变量
    char str[100];
    int isWord = 0;
    int count = 0; //统计单词的个数
    //提示用户输入字符串
    printf("请输入一个字符串:\n");
    //接收字符串,并保存到数组中
    gets(str);
    //循环取出每一个字符  遇到\0 循环结束
    for (int i=0; str!='\0'; i++) {

        //判断
        if (str==' ') {
            //把是否是单词标记改一下
            isWord = 0;  //这是一个标记,words=0表示是一个单词
        }else if(isWord == 0){
             //    当前循环 字符是空格 下次循环一定是一个单词
            count++;
            str = str-32; //减去32就大些了
            isWord = 1; // 让单词标志变为不是单词
        }
        //werwesdf  sdfjksldjf
    }
    printf("单词个数:%d,字符串:%s\n",count,str);
    //puts(str);

    return 0;
}

得出的结果是
请输入一个字符串:
warning: this program uses gets(), which is unsafe.
werwesdf  sdfjksldjf
单词个数:2,字符串:Werwesdf  Sdfjksldjf
Program ended with exit code: 0


我输入的后半段哪里去了???暂时无法理解



作者: msm1374    时间: 2015-9-10 21:34
我输入的字符,中间有两个空格   
作者: lixj1991    时间: 2015-9-11 18:28
在循环区域的str应该是str[i]吧,否则您定义的i没有什么意义。
并且str在定义的时候是字符串,要想表示str字符串中当前的某个字符,是不是应该使用str[i]?
str是字符串,不是应该用strcmp进行比较吗?
作者: msm1374    时间: 2015-9-12 22:29
lixj1991 发表于 2015-9-11 18:28
在循环区域的str应该是str吧,否则您定义的i没有什么意义。
并且str在定义的时候是字符串,要想表示str字符 ...

我知道原因了,不过你的理解完全不是题目的意思,你看了基础视频了吗,这是视频里面的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2