输入两个字符串(字符串长度不超过100,回车隔开),两字符串均为小写字母,要求寻找第二个字符串中第一个字符串的一种排列(即第二个字符串是否存在一个子字符串,和第一个字符串所含元素完全相同)。
0x00007FFA5722F530 (ucrtbased.dll) (2018年秋季学期程设期末机考 卷2.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFCC 时发生访问冲突。
#include
#include
#pragma warning(disable:4996)
void judge(char a[100], char b[100])
{
int i, j, k, m, flag=0;
char c[100] = { '\0' }, d[100] = { '\0' };
for (i = 0;i < strlen(b);i++) /*第二个数组*/
{
for (j = 0;j < strlen(a); j++) /*第一个数组*/
{
if (b[i] == a[j])
{
strcpy(c, a);
strcpy(d, b);
c[j] = 'A';
flag++;
for (k = j + 1;k < j + strlen(c);k++)
{
for (m = 0;m < strlen(c); m++)
{
if (b[k] == c[m])
{
c[m] = 'A';
flag++;
}
}
}
if (flag == strlen(a))
{
printf("True\n");
for (k = j;k < j + strlen(a);k++)
printf("%c", b[k]);
}
else
flag = 0;
}
}
if (flag != strlen(a))
printf("False\n");
}
}
main()
{
char a[100] = { '\0' }, b[100] = { '\0' };
scanf("%s", a);
scanf("%s", b);
judge(a[100], b[100]);
system("pause");
}
![img]https://img-mid.csdnimg.cn/release/static/image/mid/ask/056457657076176.png "#left")
遍历a,b字符串,遇到第一个相同元素时开始循环将a中的相同元素赋为A,并将计数器加1,若得到计数器的值与a的字符串长度相同,则找到题目符合条件。
如何修改错误
judge(a[100], b[100]);是传递了2给字符,改为
judge(a, b);
查找只需遍历1次就可以。
#include <stdio.h>
#include <string.h>
#pragma warning(disable : 4996)
void judge(char a[100], char b[100])
{
int i, j, k, m, flag = 0;
char c[100] = {'\0'}, d[100] = {'\0'};
int lena = strlen(a);
// for (i = 0; i < ; i++) /*第二个数组*/
for (i = 0; b[i]; i++) /*第二个数组*/
{
if (b[i] == a[0]) // b中与a首字母相同开始遍历
{
flag = 0;
strcpy(c, a);
// for (j = 0; j < lena; j++) /*第一个数组*/
for (j = 0; a[j]; j++) /*第一个数组*/
{
// if (b[i] == a[j])
// {
// strcpy(d, b);
// c[j] = 'A';
// flag++;
// for (k = j + 1; c[k]; k++)
// {
// for (m = 0; c[m]; m++)
// {
if (b[i + j] == a[j]) // if (b[k] == c[m])
{
c[j] = 'A';
flag++;
}
//}
//}
// if (flag == strlen(a))
// {
// printf("True\n");
// for (k = j; k < j + strlen(a); k++)
// printf("%c", b[k]);
// }
// else
// flag = 0;
}
if (flag == lena)
break; // 找到后跳出循环
}
}
if (flag != lena)
printf("False\n");
else
{
printf("True\n");
for (k = i; k < i + lena; k++)
printf("%c", b[k]);
printf("\n");
}
}
int main()
{
char a[100] = {'\0'}, b[100] = {'\0'};
scanf("%s", a);
scanf("%s", b);
judge(a, b); // judge(a[100], b[100]);
system("pause");
}