我的挤压功能没有按预期工作,我该怎么做才能修复这个功能?

问题描述 投票:-2回答:2

我正在做的是创建一个名为Squeeze的函数,它接受两个字符数组并进行比较。如果数组1中的字符值与数组2相同,则该函数应将其从字符数组中删除。

问题是,程序接受我的输入,但它不会删除在数组2中看到的数组1的类似值。

我已经尝试过改变squeeze的功能了,我得出的结论是,我需要遍历数组1并将数组中的第二个数组嵌入第一个,这样它就可以将数组1中的一个字符与数组2的整数进行比较,这样它就可以了可以正确擦除。问题是,虽然我知道嵌套策略有效,但它仍然不会像我想要的那样擦除字符。

#include <stdio.h>

#define MAXIMUM 1000
#define END '~'

void squeeze(char s1[], char s2[]);

int main()
{

int c, i,j; 
int n = MAXIMUM; 
char s1[MAXIMUM];
char s2[MAXIMUM]; 

printf("Please input the charachter for s1, type ~ when finished");
for(i = 0; i < n && (c = getchar())!= END; i++) 
   s1[i] = c;

printf("Please input the character for s2 type ~ when finished"); 
for(j = 0; j < n&& (c = getchar())!= END; j++)
   s2[j] = c; 

squeeze(s1, s2);
printf("After squeezing, the array s1 is %s", s1);


}

void squeeze(char s1[], char s2[])
{
int n = MAXIMUM;
s1[MAXIMUM];
s2[MAXIMUM];
int i, j; 

for(i = 0; s1[i]!= '\0'; i++){
   for(j = 0; s2[j] != '\0'; j++){
      if(s1[i] != s2[j]){
         s1[i] = s1[i];
      }else if(s1[i] == s2[j]){
         s1[i++] = s1[i]; 
      }
    }
  }
}

预期的结果是:如果我输入s1的GOLDEN EXPERIENCE REQUIEM 然后输入:s2的GER

打印应返回OLD PINK QUIM

相反,打印返回OOLDNN XXPRIINNC EQQUIMM 0012 isqrt(a)

这是非常接近的,但我不想要多余的O,X,N,Q和M.此外,E仍然存在,而0012 isqrt(a)是该功能的不受欢迎的补充。

c
2个回答
0
投票

您的代码中存在逻辑问题,s1 [i ++] = s1 [i];导致双重复制,你不是从数组中删除双重副本,而是在s1 [i]中找到相同的字符时,尝试将0或其他值放在s2 [i]中,您将更好地了解该怎么做


0
投票

这个循环都是关于变量i

for(i = 0; i < n && (c = getchar())!= END; i++) 


This loop initializes j, then compares against i, and increments i.
for(j = 0; i < n&& (c = getchar())!= END; i++)

您想解释一下您认为这条线的作用吗?

s1[i] = s1[i];
© www.soinside.com 2019 - 2024. All rights reserved.