0

从昨天开始,我一直在为这个问题绞尽脑汁,我希望有人能指出我正确的方向。我是 C 新手,我们必须创建一个程序,用户在其中输入一系列线性方程,这些方程必须用 Cramer 规则求解。数学不是问题,但是我不确定如何从由字符和整数组成的整个方程中获取系数。

用户输入应该看起来像一系列线性方程,例如:

-3x-3y-1z=6

2x+3y+4z=9

3x+2y+4z=10

如果我们只允许输入系数,这将很简单,但遗憾的是必须输入整个方程。您可以假设方程中没有空格,变量的顺序相同,并且方程有效。

我正在考虑将整个方程存储在一个数组中并搜索每个变量 (x,y,z),然后在变量之前找到 int,但我无法确定将这些找到的变量转换为整数的方法。

任何帮助是极大的赞赏。提前致谢。

4

3 回答 3

2

您可以使用 strtok 在 x/y/z/= 上拆分,然后使用 atoi 将 char* 转换为 int。

阅读 man strtok 和 man atoi 以获取更多信息(来自 stdlib 的函数)。

于 2014-03-14T23:16:50.173 回答
1

你的想法会奏效。我曾经在学校的一个非常相似的项目中这样做过,这是一场噩梦,但它(有点)奏效了。您需要一些逻辑来读取多个数字,除非您想将自己限制为低于两位数的系数。如果我没记错的话,我开始读取字符,直到在表达式中找到一个变量,然后我转换并将找到的值分配给该变量以进行解析。

要将字符转换为整数,您可以使用该atoi()函数,该函数接收字符串并返回相应的整数。


如果您愿意投入额外的时间,并且如果您在 *nix 下工作,您可能希望使用regex.h. 您将最小化您的代码,但如果您以前没有使用过正则表达式,这并不容易。

于 2014-03-15T00:13:20.240 回答
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);

瓦尔特

于 2014-03-15T00:55:46.097 回答