#include <stdio.h>
#include <string.h>
// 有个灰常坑爹的地方, a++ +b 和 a+ ++b答案都 a++ +b , 坑人啊
int main()
{
char expression[200], expressionTemp[200], *where, grapheme[26];
short int pluesFirst[26], pluesLast[26];
int i,j, sum;
char c;
while (gets(expressionTemp) != NULL) {
printf("Expression: %s\n", expressionTemp);
// 初始化
memset(grapheme, 0, sizeof(grapheme));
for (i = 0; i < 26; i++) {
pluesFirst[i] = i+1;
pluesLast[i] = 0;
}
for (i = j =0; expressionTemp[i]; i++) {
if (expressionTemp[i] != ' ')
expression[j++] = expressionTemp[i];
}
// 找出所有的"++"运算符
where = expression;
while ((where = strstr(where, "++"))) {
if (*(where+2) >='a' && *(where+2) <= 'z') {
pluesFirst[*(where+2)-'a']++;
}
else if (*(where-1) >='a' && *(where-1) <= 'z')
pluesLast[*(where-1)-'a']++;
*where = ' ';
*(where+1) = ' ';
}
// 找出所有的"--"运算符
where = expression;
while ((where = strstr(where, "--"))) {
if (*(where+2) >='a' && *(where+2) <= 'z') {
pluesFirst[*(where+2)-'a']--;
}
else if (*(where-1) >='a' && *(where-1) <= 'z')
pluesLast[*(where-1)-'a']--;
*where = ' ';
*(where+1) = ' ';
}
// 计算结果
for (sum=i=0, c='+'; expression[i]; i++) {
if (expression[i] >='a' && expression[i]<= 'z') {
grapheme[expression[i]-'a'] = expression[i];
switch (c) {
case '+' : sum += pluesFirst[expression[i]-'a']; c=0; break;
case '-' : sum -= pluesFirst[expression[i]-'a']; c=0; break;
}
}else if (expression[i] == '+')
c = '+';
else if (expression[i] == '-')
c = '-';
}
printf(" value = %d\n", sum);
for (i = 0; i < 26; i++) {
if (grapheme[i])
printf(" %c = %d\n", grapheme[i], pluesFirst[grapheme[i]-'a']+pluesLast[grapheme[i]-'a']);
}
}
return 0;
}
POJ-1539

最新推荐文章于 2020-07-30 12:35:24 发布