选择独特的字符

请大家帮忙写写代码。

要求:写一个函数my_union,接受两个字符串,并返回其中一个字符串中出现的字符,不含双倍数。

例子:输入。”zpadinton” && “paqefwtdjetyiytjneytjoeyjnejeyj “Output: “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 我把内存搞得一团糟,请给点建议,拜托了。

解决方案:

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

首先,你必须为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的返回值后释放它。

给TA打赏
共{{data.count}}人
人已打赏
解决方案

枕头无法导入

2022-5-13 13:00:25

解决方案

Py4JJavaError。在调用o1670.collectToPython时发生错误。

2022-5-13 14:00:07

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索