首页 > 解决方案 > 选择独特的角色

问题描述

请帮助代码。

要求:编写一个函数 my_union ,它接受两个字符串并返回出现在任一字符串中的字符,不带双精度数。

示例:输入:“zpadinton” && “paqefwtdjetyiytjneytjoeyjnejeyj” 输出:“zpadintoqefwjy”

我的代码:

#include <stdbool.h>
#include <stdio.h>
#include <string.h>

char *my_union(char *a, char *b) {
  char *str;
  // Algorithm for excluding nonunique characters from string a(given in
  // parameters).
  str[0] = a[0];
  int k = 1;
  str[k] = '\0';
  for (int i = 1; a[i] != '\0'; i++) {
    bool is = true;
    for (int j = 0; str[j] != '\0'; j++) {
      if (str[j] == a[i]) {
        is = false;
        break;
      }
    }
    if (is) {
      str[k] = a[i];
      k++;
      str[k] = '\0';
    }
  } // In this case we are  excluding excess character 'n' from "zpadinton", so
    // str is equal to "zpadinto".

  // Algorithm for adding unique characters from array b(given in parameters)
  // into str.
  for (int i = 0; b[i] != '\0'; i++) {
    bool is = true;
    for (int j = 0; str[j] != '\0'; j++) {
      if (str[j] == b[i]) {
        is = false;
        break;
      }
    }
    if (is) {
      strncat(str, &b[i], 1);
    }
  }
  return str;
}

第一个算法与第二个算法几乎相同,但它不起作用(。Mb 我搞砸了内存,请给一些建议。

标签: carrayscharconcatenation

解决方案


如果你的意思是,从两个字符串中获取唯一字符并将它们存储到一个新字符串中,试试这个代码;

首先,您必须为 str 分配内存。在您的代码中, str 没有指向分配的内存位置,因此您可能会遇到分段错误。

int contains(const char * str,char c)
{
    for (int i = 0; i < strlen(str); ++i)
        if(str[i] == c)
            return 1;

    return 0;
}

char * my_union(char *a, char*b)
{

    char * res = (char*)malloc(sizeof(char)*(strlen(a) + strlen(b)));

    int pushed = 0;

    for (int i = 0; i < strlen(a); ++i)
    {
        if(!contains(res,a[i])){
            res[pushed] = a[i];
            pushed++;
        }
    }

    for (int i = 0; i < strlen(b); ++i)
    {
        if(!contains(res,b[i])){
            res[pushed] = b[i];
            pushed++;
        }
    }

    return res;
}

int main(int argc, char const *argv[])
{

    char string1[9] = "abcdefgh";
    char string2[9] = "abegzygj";

    char * result = my_union(string1,string2);
    printf("%s\n", result);

    return 0;
}

另外,完成后不要忘记释放 my_union 的返回值。


推荐阅读