您的位置:首页 > 移动开发 > IOS开发

UvaOJ 537 - Artificial Intelligence?

2012-04-09 21:50 281 查看
题目

字符串处理

有个地方不知道为什么那样会wa,详见注释。

另外我采用的是一行读入,然后进行字符串parse,比较麻烦。

可以采用istringstream或sscanf等,从字符串再进行格式化读入,比较好。参考:http://www.cnblogs.com/shixuehunk/archive/2011/07/22/2113728.html 
、 http://www.cppblog.com/rakerichard/archive/2011/04/07/143608.html

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<iomanip>
using namespace std;

double P, I, U;

double cal(int p, int i, int u)
{
if(!u) return P/I;
else if(!p) return U*I;
else if(!i) return P/U;
}
double s2d(string s)
{
double ret = 0.0;
int ispre = 0;
int isdot = 0;
int dot = 1;
for(int i=0; i<(int)s.length(); i++)
{
if(s[i]=='m' || s[i]=='k' || s[i]=='M') { ispre=1; break; }
if(s[i] == '.') { isdot = 1; continue; }
if(isdot) dot*=10;
ret = ret*10+s[i]-'0';
}
ret/=(double)dot;
if(ispre)
{
switch(s[s.length()-1])
{
case 'm': ret/=1000; break;
case 'k': ret*=1000; break;
case 'M': ret*=1000000; break;
}
}
return ret;
}
int isp, isi, isu;
double solve(string s)
{
isp=0, isi=0, isu=0;
int p1 = s.find("U=", 0);
int p2 = s.find("I=", 0);
int p3 = s.find("P=", 0);
if(p1 != -1)
{
isu = 1;
int p = s.find('V', p1);
string t = s.substr(p1+2, p-p1-2);
U = s2d(t);
}
if(p2 != -1)
{
isi = 1;
int p = s.find('A', p2);
string t = s.substr(p2+2, p-p2-2);
I = s2d(t);
}
if(p3 != -1)
{
isp = 1;
int p = s.find('W', p3);
string t = s.substr(p3+2, p-p3-2);
P = s2d(t);
}
return cal(isp, isi, isu);
}
int main()
{
int t; cin>>t;
cin.get();
for(int i=1; i<=t; i++)
{
string s;
getline(cin, s);
cout<<"Problem #"<<i<<endl;
/* 用cout,直接输出函数返回值,WA
if(!isp) cout<<"P";
else if(!isi) cout<<"I";
else if(!isu) cout<<"U";
cout<<"="<<setiosflags(ios::fixed)<<setprecision(2)<<solve(s);
if(!isp) cout<<"W";
else if(!isi) cout<<"A";
else if(!isu) cout<<"V";
cout<<endl;
cout<<endl;
*/ // 用cout,先把函数返回值赋给ans,再输出ans,AC
double ans = solve(s);
if(!isp) cout<<"P";
else if(!isi) cout<<"I";
else if(!isu) cout<<"U";
cout.setf(ios::fixed);
cout.precision(2);
cout<<"="<<ans;
if(!isp) cout<<"W";
else if(!isi) cout<<"A";
else if(!isu) cout<<"V";
cout<<endl;
cout<<endl;
/* 用 printf AC。
double ans = solve(s);
if(!isp) printf("P=%.2fW\n", ans);
else if(!isi) printf("I=%.2fA\n", ans);
else if(!isu) printf("U=%.2fV\n", ans);
printf("\n");
*/
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string ios 360