У меня есть функция getCoefnExpo (), чтобы получить коэффициенты и показатели степени x в выражении a + bx.Ожидаемые: a, 0, b, 1
Моя функция subStr ():
char * subStr(char s[], int start, int stop) {
int c = 0;
static char sub[100];
while (start + c < stop) {
sub[c] = s[start + c];
c++;
}
sub[c] = '\0';
return sub;
}
char s[] = "01234";
printf("%s\n", subStr(s, 1, 4)); // 123
void getCoefnExpo(char s[], float container[], int &n) {
int len = strlen(s);
int pos = 0;
for (int i = 0; i < len; i++) {
char found[100];
if (i == 0 && s[i] == 'x') {
container[pos++] = 1;
if (s[i + 1] != '^') container[pos++] = 1;
else container[pos++] = (float)(s[i + 2] - '0');
}
else if (i == 0 && isdigit(s[i])) {
for (int j = i; j < len; j++) {
if (s[j] == 'x') {
strncpy_s(found, subStr(s, i, j), 100);
container[pos++] = atof(found);
if (s[j + 1] != '^') {
container[pos++] = 1;
}
else {
container[pos++] = (float)(s[j + 2] - '0');
}
break;
}
else if (s[j] == '+' || s[j] == '-' || j == len - 1) {
if (j == len - 1) {
strncpy_s(found, subStr(s, i, len), 100);
}
else {
strncpy_s(found, subStr(s, i, j), 100);
}
container[pos++] = atof(found);
container[pos++] = 0;
break;
}
}
}
else if (s[i] == '+' || s[i] == '-') {
if (s[i + 1] == 'x' && s[i] == '+') {
container[pos++] = 1;
if (s[i + 2] != '^') container[pos++] = 1;
else container[pos++] = (float)(s[i + 3] - '0');
}
else if (s[i + 1] == 'x' && s[i] == '-') {
container[pos++] = -1;
if (s[i + 2] != '^') container[pos++] = 1;
else container[pos++] = (float)(s[i + 3] - '0');
}
else {
for (int j = i + 1; j < len; j++) {
if (s[j] == 'x') {
strncpy_s(found, subStr(s, i, j), 100);
container[pos++] = atof(found);
if (s[j + 1] != '^') {
container[pos++] = 1;
}
else {
container[pos++] = (float)(s[j + 2] - '0');
}
break;
}
else if (s[j] == '+' || s[j] == '-' || j == len - 1) {
if (j == len - 1) {
strncpy_s(found, subStr(s, i, len), 100);
}
else {
strncpy_s(found, subStr(s, i, j), 100);
}
container[pos++] = atof(found);
container[pos++] = 0;
break;
}
}
}
}
}
n = pos;
}
Проблема:
char s1[] = "3+2x";
char *s2 = subStr(s1, 0, strlen(s1)));
printf("|%s|\n", s1);
printf("|%s|\n", s2);
Выходные данные одинаковы: | 3 + 2x |и strcmp равен 0, но когда я передаю их в функцию getCoefnExpo (char s []):
getCoefnExpo(s1); //output 3,0,2,1
getCoefnExpo(s2); //output 3,0
Я не думаю, что с getCoefnExp () что-то не так, если я не использую subStr(), subStr () не может ошибаться, так как они выдают буквально одинаковые результаты.Я понятия не имею, что здесь происходит, пожалуйста, дайте мне знать.Спасибо.