主要是数字可能是多位数,需要处理!本程序没有做异常处理,要求表达式串正确!
其中有两个内部循环代码是重复的,最好写成一个函数,这里就不改了
转载 请保留链接 http://blog.csdn.net/challenge_c_plusplus/article/details/7982076
/*表达式计算-华为校招
Author : Milo.Wang
Date : 2012/9/15
*/
#include <iostream>
#include <cstring>
using namespace std;
void Expr(const char *expr, int *ret)
{
char expr1[1024];
char expr2[1024];
strcpy(expr1,expr);
strcpy(expr2,expr);
int opds[1024];
char oprs[1024];
int idxd = 0, idxr = 0;
int opd_idx = -1;
char * p = strtok(expr1,"()*+-");
while(p != NULL)
{
opds[idxd++] = atoi(p);
p = strtok(NULL,"()*+-");
}
int i;
int digit_flag = true;
for(i = 0; expr2[i] != '\0'; ++i)
{
switch(expr2[i])
{
case '(':
case ')':
case '+':
case '-':
case '*':
digit_flag = true;
oprs[idxr++] = expr2[i];
break;
default:
if(digit_flag)
{
digit_flag = false;
oprs[idxr++] = '#';//特殊符号,标示有一个数字
}
}
}
oprs[idxr++] = '\0';
int opd_stack[1024];
char opr_stack[1024];
int opd_top = -1;
int opr_top = -1;
int opdr,opdl;
for(i = 0; i < idxr; ++i)
{
char ch;
switch((ch = oprs[i]))
{
case '*':
case '(':
opr_stack[++opr_top] = ch;
break;
case '+':
case '-':
while(opr_top > -1 && opr_stack[opr_top] == '*')
{
--opr_top;
opdr = opd_stack[opd_top--];
opdl = opd_stack[opd_top--];
opd_stack[++opd_top] = opdl * opdr;
}
opr_stack[++opr_top] = ch;
break;
case ')':
while(opr_top > -1 && opr_stack[opr_top] != '(')
{
opdr = opd_stack[opd_top--];
opdl = opd_stack[opd_top--];
char c;
int result;
switch((c = opr_stack[opr_top--]))
{
case '*':
result = opdl * opdr;
break;
case '+':
result = opdl + opdr;
break;
case '-':
result = opdl - opdr;
break;
}
opd_stack[++opd_top] = result;
}
if(opr_stack[opr_top] == '(')
--opr_top;
break;
case '\0':
while(opr_top > -1)
{
opdr = opd_stack[opd_top--];
opdl = opd_stack[opd_top--];
char c;
int result;
switch((c = opr_stack[opr_top--]))
{
case '*':
result = opdl * opdr;
break;
case '+':
result = opdl + opdr;
break;
case '-':
result = opdl - opdr;
break;
}
opd_stack[++opd_top] = result;
}
break;
case '#':
opd_stack[++opd_top] = opds[++opd_idx];
}
}
*ret = opd_stack[opd_top];
}
int main(int argc, char *argv[])
{
const char *str = "5+6*(5-2)-10";
int ret;
Expr(str,&ret);
cout << str << " = " << ret << endl;
return 0;
}
一、准备知识
了解CyanogenMode及其对各个厂商机型的支持,http://wiki.cyanogenmod.com/index.php?title=Main_Page
二、配置环境与下载源码
a) 配置环境,可以参考谷歌的文档http://source.android.com/source/index.html
b) 下载CM源码,
repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
repo sync -j16
三、源码编译
A) 适配机型
1、手机的机器为AT&T的HTC G9,发行代号:aria - liberty,因此进入硬件目录cd device/htc/liberty。
2、读取手机的私有配置文件,source extract-files.sh
3、生成编译脚本
(1)进入到根目录下的vender/cyanogen目录 cd ../../vendor/cyanogen
(2)获取谷歌应用
source extract-google-files
(3)获取rommanager.apk
./get-rommanager
这步很关键,如果获取失败,则直接打开这个get-rommanager脚本可看到一个下载地址,根据地址可直接下载,然后放置于vender/cyanogen/proprietary下。
http://download.clockworkmod.com/recoveries/RomManager.apk
(3)此时根目录还没有编译脚本buildspec.mk,复制编译脚本至根目录
cp vendor/cyanogen/products/cyanogen_lieberty.mk buildspec.mk
4、初始化编译环境
source build/envsetup.sh
5、选择编译产品
lunch cyanogen_liberty-eng
6、编译
make -j8 CYANOGEN_WITH_GOOGLE=true otapackage
7、打包刷机包
./vendor/cyanogen/tools/squisher
广电总局近期对互联网视听服务的整顿,使得曾如日中天的BT下载网站迎来生死大限,走向一个历史性的转折,对整个互联网产业链、最终用户、运营商、影视娱乐公司都将带来重大影响,并带来引发一系列连锁反应,其最终后果也将在未来的一段时间显露出来。
广电总局此次大手笔关闭P2P站点,力度之大前所未有,表示了要整顿非法视频分享的决心。根据广电的计划,今年12月20号前仍然没有获得信息网络传播视听节目许可证的网站,将被作为无证网站关闭或禁止提供视听节目。之前,广电总局与工信部在2007年12月20号联合颁布了《互联网视听节目服务管理规定》,《规定》要求开展互联网视听节目服务必须持有广电总局颁发的“信息网络传播视听节目许可证”。两年来,获得许可证的网站已接近400家,所有的中央重点新闻网站以及绝大部分视听服务商业网站都已实现持证运营。
对于个人影视类网站来说,面临的将是灭亡的命运。根据广电总局和信息产业部联合发布的《互联网视听节目服务管理规定》规定,从事互联网视听节目服务,应取得广播电影电视主管部门颁发的《信息网络传播视听节目许可证》或履行备案手续。未持有《许可证》的单位不得为个人提供上载传播视听节目服务。而要取得《许可证》,就需具备法人资格,为国有独资或国有控股单位,且在申请之日前三年内无违法违规记录。据业内人士分析,这个条件对于一般的商业BT网站来说都很难企及,更别说个人BT网站了。因此,个人BT网站由于受到注册资金和主体等方面门槛的制约,肯定无法获得《许可证》,将率先出局。根据广电总局的报道,到11月12日为止,广电总局又对“伊甸园BT-字幕下载区”等111家视听节目服务网站进行了关闭,“伊甸园”与“BT中国联盟”和“悠悠鸟”可谓国内前三大BT网站,如今已全遭关停。截至11月,广电总局今年以来查处关闭的违规视听节目网站已达414家。在不久的将来,所有“无证”经营的个人影视网站都将被广电总局关闭。
对于已经拥有互联网视听节目传播许可证的商业网站,例如BT市场第一的迅雷来说,也将受到冲击,因为像迅雷这样的大型网站,也有大量资源存放在个人影视类网站上,如果个人BT网站均被关停,那将迫使迅雷自己购买更多的服务器和带宽来提供视频点播,企业运营成本增高,最近迅雷看看上的部分美剧链接已经无法访问就已经证实了这一点。
对于最终网民来说,免费在线观看电影电视剧的时代可能就要结束了,由于大量的个人影视网站的关闭,影视资源将成为稀缺资源,有可能需要付费才能获得,由于免费影视资源可能会转移到国外服务器,免费用户下载电影的速度将会大幅下降。用户可能不得不采取购买DVD光盘或IPTV等付费方式才能看到影视作品。
对于运营商来说,影响也是多重的,电信的IPTV业务有可能会得到部分增长,但依旧会被广电限制;以往BT用户会耗费运营商50%以上的带宽,BT封杀之后,将释放出大量带宽,有利于运营商发展更多的用户,但是高速宽带用户数量有可能会降低,因为缺少影视资源将使得高速宽带无用武之处。
这次广电封杀的最大受益者是商业影视娱乐公司,因为从网上获取影视的限制,会导致更多人去电影院观看或者购买电影DVD或音乐CD,使得影视娱乐公司的收入增加,让电影人,音乐人更有热情的去创造内容,带来影视娱乐行业的繁荣。
在国际范围内,BT的发展也不明朗,上个月,世界最大的BT下载网站海盗湾宣布永久关闭Tracker服务器,Tracker服务器是整个BT下载的灵魂,失去它BT下载就没法启动,因此,BT将向去中心化方向发展,海盗湾在关闭Tracker服务器后全面启用了新的magnet协议,就能让用户在没有Tracker的情况下完成BT下载。
总的来说,广电总局对BT网站的整顿将引发大量相关网站的关停或者转型,对于相关产业会造成一系列影响,可谓几家欢喜几家愁,即使对于已有许可证的商业网站,如果广电总局继续加大对BT网站的监管和打击力度,迅雷等商业网站受波及也是在所难免,未来也会面临转型的趋势。