结构问题:我如何找到有多少学生有相同的名字(在C程序中)?
这个代码有什么问题? 我如何找到有多少学生有相同的名字 我如何找出所有 名称拼写相同(重复)(无法使用内置函数) 输入:结构问题:我如何找到有多少学生有相同的名字(在C程序中)?,c,C,这个代码有什么问题? 我如何找到有多少学生有相同的名字 我如何找出所有 名称拼写相同(重复)(无法使用内置函数) 输入: Enter student name: Hasib Enter student name: Hasib Enter student name: Jhon 输出必须如下所示: 2 students have same name 代码: Enter student name: Hasib Enter student name:
Enter student name: Hasib
Enter student name: Hasib
Enter student name: Jhon
输出必须如下所示:
2 students have same name
代码:
Enter student name: Hasib
Enter student name: Hasib
Enter student name: Jhon
#包括
结构学生{
字符名[20];
};
int main(){
结构学生s[10];
int i,j,计数=0;
对于(i=0;i<3;i++){
printf(“输入学生姓名:”);
获取(s[i].name);
}
对于(i=0;i<3;i++){
对于(j=i+1;j<3;j++){
如果(s[i].name==s[j].name){
计数++;
}
}
}
printf(“\n%d名学生同名\n\n”,计数);
}
请使用下面的代码,==不是一个用于字符串的工作命令,我们可以使用Strcmp进行相同的操作
struct student
{
char name[20];
};
int main(){
struct student s[10];
int i,j=0,count,res;
for(i=0; i<3; i++)
{
printf("Enter student name: ");
gets(s[i].name);
}
for(i=0; i<3; i++)
{
for(j=i+1; j<3; j++)
{
if(strcmp(s[i].name, s[j].name)==0)
{
count++;
}
}
}
printf("\n%d students have same name\n\n",count);
}
struct学生
{
字符名[20];
};
int main(){
结构学生s[10];
int i,j=0,计数,res;
对于(i=0;i有多个问题:
- C字符串不能像您那样与
=
进行比较。您只需比较指针,而不是数组的内容。您必须包括
并使用:
if (strcmp(s[i].name, s[j].name) == 0) {
/* duplicate name */
}
- 还请注意,不能使用
gets()
,因为如果输入太长,可能会导致未定义的行为。事实上,攻击者可能会利用此漏洞执行任意代码。请使用fgets()
或scanf(“%19s”,s[i].name)
- 为什么定义包含10个条目的
students
数组,而在main()
函数的其余部分只使用3个条目
以下是修改后的版本:
#包括
#包括
结构学生{
字符名[20];
};
int main(){
结构学生s[10];
int n,i,j,count;
对于(n=0;n<10;n++){
printf(“输入学生姓名:”);
if(scanf(“%19s%*[^\n]”,s[n].name)<1)
打破
}
计数=0;
对于(i=0;i
编辑:您的计数方法对于3个以上的条目是不正确的:如果4名学生的名字相同,count
对0,1
,0,2
,0,3
,1,2
,1,3
和2,3
,因此6名学生的名字相同(!)
下面是一个已更正的版本,它既不使用strcmp()
,也不使用strcmp():
#包括
结构学生{
字符名[20];
};
int同一字符串(常量字符*s1,常量字符*s2){
而(*s1==*s2){
如果(*s1=='\0')
返回1;
s1++;
s2++;
}
返回0;
}
int main(){
结构学生s[10];
int n,i,j,count;
对于(n=0;n<10;n++){
printf(“输入学生姓名:”);
if(scanf(“%19s%*[^\n]”,s[n].name)<1)
打破
}
计数=0;
对于(i=0;i
请正确格式化您的代码,并告诉我们您使用了哪些输入以及结果是什么。但这里最基本的问题是,当您应该使用strcmp
时,您使用==
来比较字符串。此外,您的算法也不符合您的要求。@Peter我不想使用strcmp。我希望在不使用strcmp的情况下得到结果kes没有意义,请澄清您的问题、输入、期望的输出、约束等。@Drhunter,=
不适合在C中比较字符串。永远不要使用gets
!因此它甚至已从C标准中删除。使用例如,相反。您可能会收到警告,因为不允许隐式声明函数…即gets&strcmpgets
存在安全风险。@Anandha我需要在不使用strcmp的情况下获取输出。感谢您的代码。有没有办法在不使用strcmp()的情况下找到副本@Drhunter只是通过创建一些实际的字符串比较代码。strcmp有什么问题吗?你有什么反对它的地方吗?你知道当使用=
尝试比较字符串时会发生什么吗?@Someprogrammerdude实际上有人要求我不使用strcmp就这样做。这就是我要求的原因如果不使用strcmp()@Drhunter就可以找到重复项,那么您需要自己实现字符串比较代码。您需要迭代两个字符串并逐个字符进行比较。互联网上有很多关于这方面的示例和教程。