用户输入应该看起来像一系列线性方程式,例如:
-3x-3Y-1Z = 6
2×+ 3Y + 4Z = 9
3×+ 2Y + 4Z = 10
如果我们只允许输入系数,这将很简单,但遗憾的是必须输入整个方程。你可以假设方程中没有空格,变量的顺序是相同的,方程是有效的。
我在考虑将整个方程存储在数组中并搜索每个变量(x,y,z),然后在变量之前找到int,但我无法确定将这些找到的变量转换为整数的方法。
非常感谢任何帮助。提前谢谢。
答案 0 :(得分:2)
您可以使用strtok拆分x / y / z / =然后使用atoi将char *转换为int。
阅读man strtok和man atoi以获取更多信息(来自stdlib的功能)。
答案 1 :(得分:1)
你的想法会奏效。我曾经在学校的一个非常类似的项目中做到这一点,这是一场噩梦,但它(有点)工作。除非您想将自己限制在低于两位数的系数,否则您需要一些逻辑来读取多个数字。如果我没记错的话,我开始阅读这些字符,直到我在表达式中找到一个变量,然后我转换并将我找到的值分配给该变量进行解析。
要将字符转换为整数,可以使用atoi()
函数,该函数接收一串字符并返回相应的整数。
如果你愿意投入额外的时间,如果你在* nix下工作,你可能想要用regex.h
挖掘正则表达式的领域。你可以最小化你的代码,但如果你之前没有使用过正则表达式,那就太容易了。
答案 2 :(得分:0)
//ax+bx+cz=d, -999 <= a,b,c,d <= 999
int a, b, c, d, i ,j;
char A[5], B[5], C[5], D[5], str[22];
char *pntr;
printf("Enter equation: ");
fgets(str, 21, stdin);
pntr = A;
i = j = 0;
while(1){
if(str[i] == 'x'){pntr[j] = '\0'; pntr = B; j = 0; i++; continue;}
else if(str[i] == 'y'){pntr[j] = '\0'; pntr = C; j = 0; i++; continue;}
else if(str[i] == 'z'){pntr[j] = '\0'; pntr = D; j = 0; i += 2; continue;}
else if(str[i] == '\n' || str[i] == '\0'){pntr[j] = '\0'; break;}
pntr[j] = str[i];
i++;
j++;
}
a = atoi(A);
b = atoi(B);
c = atoi(C);
d = atoi(D);
printf("%d %d %d %d \n", a, b, c, d);
瓦尔特
答案 3 :(得分:-1)
#include<stdio.h>
int main()
{
int n,i;
int a[11];
char *s;
printf("\nEnter no of variables: ");
scanf("%d",&n);
printf("Enter the equation: ");
for(i=0;i<n;i++)
scanf("%d%*c",&a[i]);
scanf("%*c%d",&a[i]);
for(i=0;i<=n;i++)
printf("%d ",a[i]);
return 0;
}