Моя функция сжатия не работает должным образом, что я могу сделать, чтобы исправить функцию? - PullRequest
0 голосов
/ 09 апреля 2019

Я делаю функцию Squeeze, которая берет два символьных массива и сравнивает их. Если в массиве 1 есть символьное значение, совпадающее с массивом 2, функция должна удалить его из массива символов.

Проблема в том, что программа принимает мой ввод, но не удаляет аналогичные значения массива 1, которые видны в массиве 2.

Я уже пытался изменить функцию squeeze, и я пришел к выводу, что мне нужно перебрать массив один и массив вложений два внутри массива один, чтобы он сравнивал один символ в массиве 1 со всем массивом два, чтобы он мог стереть правильно. Проблема в том, что, хотя я знаю, что стратегия вложения работает, она все равно не стирает символы, как я намереваюсь.

#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
и затем введите: GER для s2

Печать должна вернуть OLDN XPINC QUIM

Вместо этого печать возвращает OOLDNN XXPRIINNC EQQUIMM
0012 isqrt (a)

Что очень близко, но я не хочу лишних O, X, N, Q и M. Кроме того, E все еще там, и 0012 isqrt (a) является нежелательным дополнением к функции.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

В вашем коде логическая проблема, s1 [i ++] = s1 [i];приводит к двойным копиям, и вы не удаляете двойные копии из массива, вместо этого попробуйте поместить 0 или другое значение в s1 [i], когда он найдет тот же самый символ в s2, вы получите лучшее представление о том, что делать

0 голосов
/ 09 апреля 2019

Этот цикл все о переменной i:

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


Этот цикл инициализирует j, затем сравнивает с i и увеличивает i.
for(j = 0; i < n&& (c = getchar())!= END; i++)

Не могли бы вы объяснить, что, по вашему мнению, делает эта строка?

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