黑马程序员技术交流社区
标题:
基本类似的代码,为啥结果就是不一样,求解,问题出在...
[打印本页]
作者:
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