求助:C语言算法

来源:百度知道 编辑:UC知道 时间:2024/04/28 14:31:18
题目是:学生信息的自动筛选程序。
有一个要求是实现模糊筛选,例如可将姓名中包含“张”或姓“张”的学生列出。

看下我这样写的算法哪里错了,实现不了,提示内存不能为read,是为什么?(stu是定义的结构体包含name项)
void name_sx(st stu[N])
{int i,j;
char name[7];
printf("输入您要筛选的姓名:");
scanf("%s",&name[i]);
for(i=0;i<7;i++)
{if(strcmp(name[i],stu[i].name)==0)break;
for(j=0;j<=i;j++)
printf("%s",name[j]);
}
}
改了以后还是不行啊。。name[7]是姓名的长度,

strcmp是比较字符串的
如果name[7]="张";那name[2]就是'\0',name[3]后面的内容就不知道是啥了。
你做for(i=0;i<7;i++) , strcmp(name[i],stu[i].name)当然要出错了。

建议你用strstr函数

char *strstr(char *str1, char *str2);
从字符串str1中寻找str2第一次出现的位置(不比较结束符'\0')。
返回指向第一次出现str2位置的指针,如果没找到则返回NULL。

for(i=0;i<7;i++)
{if(strcmp(name[i],stu[i].name)==0)break;
for(j=0;j<=i;j++)
printf("%s",name[j]);
}

改成
for(i=0;i<7;i++) // 有7个学生?这里没看懂,我就这样认为吧
{
if( NULL==strstr(stu[i].name, name) ) //如果学生i的名字里没有name就继续下一个学生
continue;
else //找到
printf("%s\n", stu[i].name); //输出包含name的学生名字
}