加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

给定两个字符串,找到两个字符串共有的单词

发布时间:2020-12-16 07:15:55 所属栏目:百科 来源:网络整理
导读:例如:输入:char * str1 =“一切都很好”; ??????????????????char * str2 =“是谁”; ????输出:两个给定字符串中的常用字,返回字符串的二维数组. #define SIZE 31char ** commonWords(char *str1,char *str2) { int i,j=0,count1,count2,k=0,a,b,m=0,n; c
例如:输入:char * str1 =“一切都很好”;
??????????????????char * str2 =“是谁”;
????输出:两个给定字符串中的常用字,返回字符串的二维数组.

#define SIZE 31

char ** commonWords(char *str1,char *str2) {

    int i,j=0,count1,count2,k=0,a,b,m=0,n;
    char str3[100][100],str4[100][100];
    char **output;
    output = (char **)malloc(SIZE*sizeof(char*));
    if (str1 == NULL || str2 == NULL)
    {
        return NULL;
    }
    for (i = 0; str1[i] != ''; i++)
    {
        if (str1[i] != ' ')
        {
            str3[j][k++] = str1[i];
        }
        else
        {
            str3[j][k++] = '';
            j++;
            k = 0;
        }
    }
    str3[j][k++] = '';
    count1 = j > 0 ? j + 1 : j;
    j =  k = 0;
    for (i = 0; str2[i] != ''; i++)
    {
        if (str2[i] != ' ')
        {
            str4[j][k++] = str2[i];
        }
        else
        {
            str4[j][k++] = '';
            j++;
            k = 0;
        }
    }
    str4[j][k++] = '';
    count2 = j > 0 ? j + 1 : j;
    for (i = 0; i < count1; i++)
    {
        for (j = 0; j < count2; j++)
        {
            if (str3[i][k] == str4[j][k])
            {
                if (str3[i][k + 1] == str4[j][k + 1] && str3[i][k + 2] == str4[j][k + 2] == '')
                {
                    a = i;
                    b = k;
                    while (str3[a][b] != '')
                    {
                        output = (char **)malloc(SIZE*sizeof(char));
                        output[m][n] = str3[a][b];
                        n++;
                        b++;
                    }
                    output[m][n] = '';
                }
                else if (str3[i][k + 1] == str4[j][k + 1] && str3[i][k + 2] == str4[j][k + 2])
                {
                    a = i;
                    b = k;
                    while (str3[a][b] != '')
                    {
                        output = (char **)malloc(SIZE*sizeof(char));
                        output[m][n] = str3[a][b];
                        n++;
                        b++;
                    }
                    output[m][n] = '';
                    m++;
                }
            }
        }
    }
    return output;
    }

我在可视工作室调试此代码并且测试失败.它显示此“消息:异常代码:C0000005”.这意味着与内存空间分配有关的错误.那么我哪里出错了?

解决方法

你有这个说法

output = (char **)malloc(SIZE*sizeof(char));

在你的程序的两行.

您必须修改此语句,以便为char **类型的双指针输出分配内存,但您还需要为输出的每个元素分配内存,如下所示:

int i;
output = (char **)malloc(SIZE*sizeof(char*));
for (i = 0; i < SIZE; i++)
    output[i] = (char *)malloc(x*sizeof(char));

其中x是所需的大小.

例如,还要检查NULL指针返回

if (output[i] == NULL)
    ....

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读