返回普通字符

时间:2018-10-09 08:02:06

标签: c arrays string while-loop

我的代码应该比较2个字符串,并按字母顺序返回常见字符。如果没有公共字符,它将返回一个空字符串。

但是该程序未运行。

代码

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

示例

#

我如何使其工作?

3 个答案:

答案 0 :(得分:1)

您的代码有很多问题

  1. strcmp不需要进行简单的字符比较
  2. 调用者分配的第三个字符是字符串吗?
  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;
}

答案 1 :(得分:0)

您的if case和Else if case是相同的,您只是根据Index比较元素。也就是说,您正在将第一个元素与第一个元素进行比较,第二个元素与第二个元素进行比较,依此类推。这不会为您提供解决方案。我建议使用两个for循环。以后,我会为您提供代码

答案 2 :(得分:0)

一个选项是为第一个字符串中的每个字符遍历完整的第二个字符串

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