gpt4 book ai didi

c - 如何永久更改数组的子字符串? C编程

转载 作者:太空宇宙 更新时间:2023-11-03 23:58:51 24 4
gpt4 key购买 nike

假设我有一个包含以下表达式的数组:

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

有人可以帮我解决这个问题,让用户输入永久编辑表达式吗?谢谢!

最佳答案

您总是在 while 调用 numReplace(infix);。但是您永远无法更改中缀。在您的函数 numReplace 中,您必须更改 infix,但您可以创建/更改 result。它是函数的本地。如果您直接更改中缀,您可以解决不止一次迭代的问题。

最后尝试使用 strcpy , 将结果复制到中缀

strcpy(infix, result);

你需要确保 result 适合 infix,否则你会遇到缓冲区溢出。您可以分配相同的大小。

关于c - 如何永久更改数组的子字符串? C编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53136179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com