您的位置:首页 > 其它

537 - Artificial Intelligence?

2016-08-13 15:24 106 查看
一.思路

二.代码

三.总结

一.思路

本题关键是字符串读入提取的问题,

一开始我觉得用getchar一个一个读然后判断的话,如果读到等号等号前面的字符没有办法得到了

用gets一次性读入一行字符的话还是要一个一个判断

于是想着用scanf,每次读入一个单词判断一下这个单词里有没有等号

但是实际上用scanf读反而会是程度读起来更复杂。因为用scanf读入后还是要一个字符一个字符的判断

实际上还是要对字符进行逐个的判断

而之前遇到的问题可以有两种解决办法,

用getchar循环读入

一是判断等号,但是每次记录前一个读取的字符,然后判断前一个字符是否是PUI这三个字符中的某一个

一是判断是否是P,U,I这三个关键字符,然后判断其后的字符是否是等号,如果是进行数字的提取,如果不是,进行下一次循环

二.代码

#include<stdio.h>

int main() {

double P, I, U;
char c,bc,t,pre;
char line[1000];
int n;

scanf_s("%d", &n);
t = getchar();

int i;
for (i = 1; i <= n;i++) {
P = -1;
I = -1;
U = -1;
int times = 2;
while (times--) {
while ((c = getchar()) != EOF) {
if (c == '=') {
if (bc == 'I') {
scanf_s("%lf", &I);
pre = getchar();
if (pre == 'm') I = I*0.001;
else if (pre == 'k')I = I * 1000;
else if (pre == 'M')I = I * 1000000;

break;
}

if (bc == 'U') {
scanf_s("%lf", &U);
pre = getchar();
if (pre == 'm') U = U*0.001;
else if (pre == 'k')U = U * 1000;
else if (pre == 'M')U = U * 1000000;

break;
}

if (bc == 'P') {
scanf_s("%lf", &P);
pre = getchar();
if (pre == 'm') P = P*0.001;
else if (pre == 'k')P = P * 1000;
else if (pre == 'M')P = P * 1000000;

break;

}
}// if c== '='
bc = c;
}//while c=getchar

}//for i
gets_s(line);
printf("%s%d\n", "Problem #", i);

if (P == -1) { printf("P=%.2fW\n", U*I); }
else if (U==-1) { printf("U=%.2fV\n", P/I); }
else if (I==-1) { printf("I=%.2fA\n",P/U); }

}//while n

return 0;

}

三.总结
如何选择最优的读入方式

读入时 注意转行符的处理 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  字符串处理