繁体   English   中英

返回一个新字符串,其中包含来自其他两个字符串的字符

[英]Returns a new string with characters from two other strings

编写一个函数 common_char,它接受两个字符串作为参数,并返回一个新字符串,该字符串包含两个字符串之一中出现的所有字符的单个副本。

例如,字符串 1:你好 字符串2:世界 新字符串是: hellowrdol已经在 hello 的数组中)。

这里可以使用string函数。也就是说,string1中的所有字符都被复制到新的string中,但是string 2中的字符只复制string1中没有的字符。 那是过去的考试问题,大学没有提供答案。 这是我的代码。

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

char *common_char(char *string1, char *string2) {
    int str_length1 = strlen(string1);
    int str_length2 = strlen(string2);
    char *new_string = malloc(str_length1+str_length2+1);

    for (int index_1 = 0; index_1 < str_length1; index_1++) {
        for (int index_2 = 0; index_2 < str_length2; index_2++) {
            if (string1[index_1] == string2[index_2]) {
            
            }
        }
    } 
}

int main(void) {


    return 0;
}

我的想法是根据嵌套循环查找字符串2和字符串1中的重复字符,但是条件语句有问题,有红线,还有如何复制非重复字符串的字符? 我知道 strcopy(),但是如何删除重复的字符?

我提出了一个解决方案,它使用动态内存并在每次必须添加新字符时调整结果 char* 的大小。 有两个循环,第一个迭代b字符串,第二个循环检查b字符串的非字符在a字符串中是否重复,如果不重复,则添加它。 希望您了解 realloc 以在每次必须添加元素时动态调整 char* 的大小。

首先,我将结果字符串初始化为字符串 a 的大小,以便可以将其全部复制到里面。 我认为它的排序方法称为气泡法。

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

char* common_char(char* a, char* b)  {
    
    char* result = (char*)malloc(sizeof(char)*strlen(a)+1);
    int i = 0;
    int j = 0;
    int repeated = 0;
    
    strcpy(result,a);
    
    for(i=0; i<strlen(b); i++) {
        for(j=0; j<strlen(result); j++) {
            if(b[i] == a[j]) {
                repeated = 1;
            }
        }
        if(!repeated) {
            result = (char*)realloc(result,strlen(result)+sizeof(char));
            result[strlen(result)] = b[i];
            result[strlen(result)+1] = '\0';
        }
        repeated = 0;
    }
    
    return result;
}

int main()
{
    char a[] = "hello";
    char b[] = "world";
    
    char* result = common_char(a,b);
    
    printf("%s", result);
    
    return 0;
}

编辑:我已经修改了代码以使其正常工作。 关于内存分配的注释,我修改了结果的声明,给它空间'\0'。 在执行 realloc 时,我已经考虑 realloc 不会增加 strlen() 因为 strlen() 是一个计数器,直到 '\0' 不是变量的大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM