c - 选择独特的角色
问题描述
请帮助代码。
要求:编写一个函数 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 我搞砸了内存,请给一些建议。
解决方案
如果你的意思是,从两个字符串中获取唯一字符并将它们存储到一个新字符串中,试试这个代码;
首先,您必须为 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 的返回值。
推荐阅读
- vscode-remote - 为 VSCode 远程容器中的转发端口指定监听地址 0.0.0.0
- apache-spark - spark中的memory_only与memory_only_ser
- qt - qt-qml-Qt Creator 使用msvc2017 qDebug 打印文字乱七八糟
- allennlp - allennlp.common.checks.ConfigurationError
- android - android中Loaders的真正用法是什么
- java - 队列的静态工厂方法
- php - 引导 php crud。删除后,我想留在同一个地方
- slack - 当 bot-token 发布到公共 Github 存储库时,Slack-app 已从工作区中删除
- visual-studio-code - 在 VsCode 中调试 Jupyter 笔记本
- c++ - 来自 'std::basic_ostream 的用户定义转换无效
' 到 'int' [-fpermissive]