给定两个字符串,找到两个字符串共有的单词
发布时间: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) .... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |