У меня есть код, подобный приведенному ниже: (Работает хорошо)
#include <string.h>
#include <stdlib.h>
#define _CRT_SECURE_NO_WARNINGS
int main(){
char* func; // divide the given polynomial expression with "()"
func = malloc(sizeof(int));
scanf("%[^\n]s", func);
char *cal[20] = { NULL, };
int i = 0;
char *ptr = strtok(func, "()");
while (ptr != NULL){
cal[i] = ptr;
printf("%s\n", cal[i]);
i++;
ptr = strtok(NULL, "()");
}
printf("Complete 1");
return 0;
}
И я получил результат (Когда я ввожу (3x ** 2 + 4x ** 1 + 4) * (2x * * 2 + 3))
(3x**2+4x**1+4)
*
(2x**2+3)
Complete 1
Итак, я попытался сделать больше типов манипулирования с добавлением большего, в то время как l oop под кодом выше:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define _CRT_SECURE_NO_WARNINGS
int main(){
char* func; // divide the given polynomial expression with "()"
func = malloc(sizeof(int));
scanf("%[^\n]s", func);
char *cal[20] = { NULL, };
int i = 0;
char *ptr = strtok(func, "()");
while (ptr != NULL){
cal[i] = ptr;
printf("%s\n", cal[i]);
i++;
ptr = strtok(NULL, "()");
}
printf("Complete 1");
int j = 0; // Change + to +- in the divided expression
char *num[20] = {NULL, };
char ptr2 = strtok(cal, "+");
while (2j - 2 < i){
for(int k = 0; k< strlen(cal[2j-2]); k++){
if ((cal[2j-2] + k) == '-'){
char s[] = "+";
memmove(cal[2j - 2] + k-1, s, strlen(s));
}
}
}
printf("Complete 2");
return 0;
}
Однако в этом В этом случае я получил результат, подобный
(3x**2+4x**1+4)
*
(2x**2+3)
, и функция еще не завершена.
Я думаю, что застрял в первом, пока l oop, потому что «Complete 1» не распечатывается .
Почему происходит такая ситуация?
Спасибо за чтение, и любая помощь будет принята с благодарностью.
PS Я запускал этот код в среде linux с g cc команда.