Возвращение общих символов - PullRequest
0 голосов
/ 09 октября 2018

Мой код должен сравнивать 2 строки и возвращает общие символы в алфавитном порядке.Если общих символов нет, возвращается пустая строка.

Однако программа не запущена.

Код

void strIntersect(char *str1, char *str2, char *str3)
{
int i,j, k;
i = 0;
j = 0;
k = 0;
while(str1[i]!='\0' || str2[j]!='\0')
{
    if(strcmp(str1[i],str2[j])>0)
    {
        str3[k] = str1[i];
        k++;
    }
    else if (strcmp(str2[j],str1[i])>0)
    {
        str3[k] = str2[j];
        k++;
    }
i++;
j++;
}
}

Пример

Input string 1:abcde
Input string 2:dec
Output: cde

Как мне заставить его работать?

Ответы [ 3 ]

0 голосов
/ 09 октября 2018

Можно перебрать полную вторую строку для каждого символа в первой строке

int i = 0;
int k = 0;
while(str1[i] != '\0') {
    int j = 0; 
    while(str2[j] != '\0') {
        if (str1[i] == str2[j]) {
           str3[k] = str1[i];
           k++;
        }
        j++;
    }
    i++;
}

Я заменил strcmp, потому что вы сравниваете отдельные символы, а не string

0 голосов
/ 09 октября 2018

С вашим кодом довольно много проблем

  1. strcmp не требуется для простого сравнения символов
  2. 3-я строка символов выделена вызывающей стороной?
  3. Ваш подход не будет работать, если исходные строки имеют разные размеры или не в алфавитном порядке.

Мое решение предполагает, что ввод является ASCII, и эффективен (использовался простой массив char синдексы, обозначающие значение ASCII символа).
Если символ найден в str1, карта символов будет иметь 1, если она является общей, она будет иметь 2, в противном случае она будет иметь 0.

void strIntersect(char *str1, char *str2, char *str3)
{
  int i=0, j=0, k=0;
  char commonCharsMap[128] = { 0 };

  while(str1[i] != '\0')
  {
    commonCharsMap[str1[i++]] = 1;
  }

  while(str2[j] != '\0')
  {
    if(commonCharsMap[str2[j]] == 1) 
    {
      commonCharsMap[str2[j++]] = 2;
    }
  }

  for(i=0; i<128; i++)
  {
    if(commonCharsMap[i] == 2)
    {
      str3[k++] = i;
    }
  }
  str3[k++] = '\0';
}

int main() 
{
  char str1[] = "abcde";
  char str2[] = "dce";
  char str3[30];
  strIntersect(str1, str2, str3);

  printf("Common chars: %s\n", str3);
  return 0;
}
0 голосов
/ 09 октября 2018

Ваш if case и Else if case идентичны, и вы просто сравниваете элементы в соответствии с вашим индексом.т.е. вы сравниваете первый элемент с первым, второй со вторым и так далее.Это не даст вам решения.Я предлагаю использовать две петли.Я дам вам код позже, если вы хотите

...