&豪
豪->blog
C++博客
|
首页
|
发新随笔
|
发新文章
|
联系
|
聚合
|
管理
随笔:81 文章:91 评论:256 引用:0
变量初始化的重要性!
今天在做一道华为面试题目时候,就是因为没有将变量初始化,而导致我用了一节课的时间调试:)
题目是:找出01字符串中0和1出现的最大次数.
代码:
#include
<
iostream
>
#include
<
string
>
using
namespace
std;
void
main()
{
char
*
a
=
"
010000010111101101000000000
"
;
int
i,temp0
=
0
,temp1
=
0
,max0
=
0
,max1
=
0
;
//
对变量初始化,如果不初始化,变量值是随机的
for
(i
=
0
;i
<
strlen(a);i
++
)
{
switch
(a[i])
{
case
'
0
'
:
{
temp0
++
;
if
(a[i
+
1
]
==
'
1
'
||
i
==
strlen(a)
-
1
)
{
if
(max0
<
temp0) max0
=
temp0;
temp0
=
0
;
}
break
;
}
case
'
1
'
:
{
temp1
++
;
if
(a[i
+
1
]
==
'
0
'
||
i
==
strlen(a)
-
1
)
{
if
(max1
<
temp1) max1
=
temp1;
temp1
=
0
;
}
break
;
}
}
}
cout
<<
"
max0=
"
<<
max0
<<
endl;
cout
<<
"
max1=
"
<<
max1
<<
endl;
}
那为什么不对i初始化呢?因为尽管i没被初始化,它的初始值是随机的,但在循环参数表里面已经对他进行赋值,所以i的随机值已经被0覆盖。
发表于 2005-11-22 00:40
豪
阅读(1461)
评论(9)
编辑
收藏
引用
所属分类:
C++之梦
评论
#
re: 变量初始化的重要性!
#include <iostream>
void main()
{
char *a="010000010111101101000000000";
int max[2] = {0, 0};
int count[2] = {0, 0};
while(*a)
{
int index = *a - '0';
count[index] ++;
count[index^1] = 0; // count[index?0:1] = 0; // count[index==0?1:0] = 0;
if(count[index] > max[index])
max[index] = count[index];
a++;
}
std::cout << "max 0: " << max[0] << std::endl;
std::cout << "max 1: " << max[1] << std::endl;
}
// output
// max 0: 9
// max 1: 4
点评:
1. 就C字串来说,从头到尾的遍历不需要for,用while是最佳选择。
2. strlen是很浪费的操作,如果非要用,对同一个不变长度的字串来说,用一个变量来存储,然后重复使用,比重复计算strlen要好得多。
3. 对数字串来说,可以直接将字符减去'0'得到相应的数字。
4. 比较判断其实并不比赋值省时,有时候直接赋值,比起比较后再赋值可能更有效率。更何况你的判断条件达三条之多才决定是否需要赋值。
所以if(a[i+1]=='0'/*或'1'*/||i==strlen(a)-1)可以省掉。
5. 利用数组的下标,会给你带来意想不到的简洁。
6. 最后,变量没有初始化,是算法设计的问题。如果初始条件都没有确定,只能说明你的算法没有想清楚。
#
re: 变量初始化的重要性!
非常感谢网志兄的点评,又学到东西啦!
这六条评论真是受益匪浅啊!
谢谢:)
#
re: 变量初始化的重要性!
count[index^1] = 0; // count[index?0:1] = 0; // count[index==0?1:0] = 0;
这一行不懂。。。能否解释一下,谢谢:)
#
re: 变量初始化的重要性!
查了一下^是按位移或,不过我对位操作一窍不通。。。。。。。。
#
re: 变量初始化的重要性!
count[index^1] = 0; // count[index?0:1] = 0; // count[index==0?1:0] = 0;
//===========================
觉得不如下面这个可读性好或简洁:
count[ ! index ] = 0;
个人意见哈^-^
#
re: 变量初始化的重要性!
意思是,这三条都可以。你可以选一条你认为能够理解的就可以了。
我建议用
count[index==0? 1 : 0] = 0;
至于可冰的count[!index] = 0;我觉得不好。!是表示逻辑非的操作,用在此处会让人误会,代码不好读。
#
re: 变量初始化的重要性!
呵呵,我明白啦,感谢大家啊!
#
re: 变量初始化的重要性!
变量随定义随初始化,随时的错误检查,这些都是c/c++编程必须要养成的"习惯".有无数的错误和这两个有关.
#
re: 变量初始化的重要性!
感谢土哥!
刷新评论列表
标题
姓名
主页
验证码
*
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
.NET频道
博客园社区
闪存
相关文章:
真是水,居然可以这样将int转成str
内存池(version1.1)
智能指针源码
More Effective 的 Reference Counting
从二叉树的递归遍历想到的:利用重载函数,使函数接口更"友好"
又是一题动态规划--经典
看 c++primer 后的一个问题
递归--->计算日期总数
不看书怎么见彩虹?
变量初始化的重要性!
网站导航:
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理
<
2005年12月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
公告
潜心看书研究!
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(16)
给我留言
查看公开留言
查看私人留言
随笔分类
(80)
AJAX(1)
(rss)
C++之梦(11)
(rss)
DesignPattern(1)
(rss)
PHP之路(9)
(rss)
TCP/IP
(rss)
VC
(rss)
计算机图形学(2)
(rss)
生活感想(24)
(rss)
算法&ACM(32)
(rss)
文章分类
(89)
ACM题目(26)
(rss)
apache(3)
(rss)
Basic C++(8)
(rss)
Java(4)
(rss)
Linux(3)
(rss)
MFC(2)
(rss)
mysql(2)
(rss)
php学习与实践(4)
(rss)
Python(1)
(rss)
string match(3)
(rss)
操作系统(1)
(rss)
计算机(1)
(rss)
数据结构与算法(29)
(rss)
数论(1)
(rss)
网络(1)
(rss)
相册
MY LIFE
MY PRODUCTION
SCUT/ICPC MY TEAM
ACM OJ
HOJ
POJ
TOJ
URAL
UVA
ZOJ
My friends
Apple's Garden
asp's blog
chgsh's blog
evicn's blog
jay_zzw's blog
shyli's blog
sicheng's blog
xmm's blog
豪的space
踏雪赤兔's blog
搜索
积分与排名
积分 - 92076
排名 - 34
最新评论
1. re: 好高兴啊,a+b那题一次通过啦,acm有个好开始!!!^_^
很好啊,很强大啊
--3d中后付款
2. re: map 用法
不错...
--aa
3. re: 看 c++primer 后的一个问题
不错
--test
4. re: 扫描线-通用多边形填充算法
以后写算法建议用纯C写。
--组织者
5. re: 用stl打spfa短了1k代码,慢了200ms
摆明的队列dij。。。。
--KR
阅读排行榜
1. 中国剩余定理(同余方程组)小结(2904)
2. 内存池(version1.1)(2300)
3. 看 c++primer 后的一个问题(2119)
4. 扫描线-通用多边形填充算法(1993)
5. 扩展的欧拉函数 pku1091(1724)
评论排行榜
1. 好高兴啊,a+b那题一次通过啦,acm有个好开始!!!^_^(30)
2. 看 c++primer 后的一个问题(14)
3. 今天又过条简单题,呵呵(14)
4. 从二叉树的递归遍历想到的:利用重载函数,使函数接口更"友好"(9)
5. 今天有点郁闷!~(9)