Как навсегда изменить подстроку массива? C программирование - PullRequest
0 голосов
/ 04 ноября 2018

Допустим, у меня есть массив, который содержит выражение:

X1+B*3

Затем я даю пользователю такие параметры, чтобы он выполнялся в цикле while:

int main(){
   char infix[50];
   strncpy(infix, argv[1], 50);
   infix[50] = '\0';

   int userInput;


   while (userInput != 7){

            printf("Please input a number.\n");
            scanf("%d", &userInput);

                    if (userInput == 1){
                            display(infix);
                    }
                    else if (userInput == 2){
                            numReplace(infix);
                    }
            }
}

Опция 1 отображает текущее выражение, а опция 2 изменяет значение выражения так, что numReplace содержит:

char numReplace(char infix[50])
{
    char rep[50];
    char newstr[50];

    printf("Please enter the variable to be replaced\n");
    scanf("%s", rep);

    printf("Please enter the value to be placed\n");
    scanf("%s", newstr);

    char result[1000] = "";
    char *tmp;
    int len;
    char *k = infix;
    char *res = result;
    while (1)
    {
            tmp = strstr(k,rep);
            if (tmp == NULL)
                    break;
            len=tmp-k;
            tmp=tmp+strlen(rep);
            strncpy(res,k,len);
            strcat(res,newstr);
            res += len + strlen(newstr);
            k = k+len+strlen(rep);
    }
    if (!tmp)
    strcat(result,k);
    puts(result);

}

После выполнения теста печати функция numReplace работает так, что если я выберу переменную X1 для замены на 2, тогда новое выражение будет

2+B*3

Однако, когда я заставляю пользователя снова выбирать опции, и пользователь выбирает опцию 1, которая является опцией отображения, выражение возвращается к своему нормальному состоянию:

X1+B*3

Может кто-нибудь помочь мне, чтобы выражение постоянно редактировалось пользовательским вводом? Спасибо!

1 Ответ

0 голосов
/ 04 ноября 2018

Вы всегда звоните numReplace(infix); на , а . Но вы никогда не сможете изменить инфикс . В вашей функции numReplace вы должны изменить инфикс , но вы создадите / измените результат . И это локально для функции. Если вы измените напрямую infix , вы решите проблему более чем за одну итерацию.

В конце попробуйте использовать strcpy , чтобы скопировать результат в infix .

strcpy(infix, result);

Вам нужно убедиться, что результат соответствует infix , иначе вы получите переполнение буфера. Вы можете сделать это, выделив оба одинакового размера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...