@[AngelBeats](/space/show?uid=89133)
1.判断正负号的时候
```cpp
if(
a[i]<='0'||a[i]>='9')
//应该改成下面这样
if(a[i]<'0'||a[i]>'9')
```
但是这样也有问题像这样的数据你过不了
```cpp
-a+a-3=a-3
```
你会卡在等号后面的a上,导致你的x等于了a,然后gg
所以你应该改成这样
```
if(a[i]=='-'||a[i]=='+')
```
2.判断变量前面是否有系数的时候
```cpp
if(m == 0) m = 1; //你的代码
```
有一个问题你没有考虑到,如果m本来就等于0呢?举个例子
```cpp
a=0
```
m本来等于0的,但你的代码会让m=1,所以正确答案为a=0这样的代码会跑出a=1的结果。
所以应该加个特判
```cpp
if(m==0&&(a[i]>='a'&&a[i]<='z')) m=1;
```
只有当数字后面有变量(也就是字母)时才将0变成1
然后就没什么问题了
主要是冲着你这名字来的,少打了个'!'号
dalao,麻烦下次发代码的时候用一下Markdown,这样看好麻烦
by ACINE @ 2018-08-05 21:53:55
非常抱歉,感谢您的提醒和建议,谢谢!
by AngelBeats @ 2018-08-06 09:05:58
#include <bits\stdc++.h>
using namespace std;
int main()
{
char s[100000];
scanf("%s", s);
double a = 0, b = 0;
int slog = 1, num = 0, flag;
for (int i = 0; s[i] != '\0'; i++) {
if ('0' <= s[i] && s[i] <= '9') {
num = num * 10 + s[i];
} else if ('a' <= s[i] && s[i] <= 'z') {
a += num;
num = 0;
flag = i;
} else if (s[i] == '-') {
slog = -1;
} else if (s[i] == '-') {
slog = 1;
}
num *= slog;
}
printf("%c=%0.3f", s[flag], a/b);
return 0;
}
by 时空之影 @ 2018-08-06 15:41:28
#你这个好像编译失败
```
include <bits\stdc++.h>
using namespace std;
int main() {
char s[100000];
scanf("%s", s);
double a = 0, b = 0;
int slog = 1, num = 0, flag;
for (int i = 0; s[i] != '\0'; i++) {
if ('0' <= s[i] && s[i] <= '9') {
num = num 10 + s[i];
} else if ('a' <= s[i] && s[i] <= 'z') {
a += num; num = 0; flag = i;
} else if (s[i] == '-') {
slog = -1;
} else if (s[i] == '-') {
slog = 1;
}
num = slog;
}
printf("%c=%0.3f", s[flag], a/b);
return 0;
}
```
by AngelBeats @ 2018-08-06 16:56:33
# 我把我的代码重发一次,太辣眼了
```
#include <cstdio>
char a[20];
int main(){
char c,x;
int m,i,j;
double sum1 = 0,sum2 = 0,tag = 1;//sum1为合并整数,sum2为合并变量;
scanf("%s",a);
for(i = 0;a[i] != '\0';){
x = '+';
if(a[i] == '=') {
tag = -1;
i++;
}
if(a[i] == '-'||a[i] == '+') {
x = a[i];
i++;
}
m = 0;
while(a[i] >= '0'&&a[i] <= '9'){
m = m * 10 + (a[i] - '0');
i++;
}
if(m == 0&&a[i] >= 'a'&&a[i] <= 'z') m = 1;
m *= tag;
if(x == '-' ) m *= -1;
if(a[i] >= 'a'&&a[i] <= 'z') {
sum1 += m;
c = a[i];
i++;
}
else sum2 += m;
}
printf("%c=%.3lf",c,-sum2/sum1);
return 0;
}
```
by AngelBeats @ 2018-08-06 16:58:42