for(i=0;i<len;i++) { if(strcmp(peo[i].name,name)==0) { for(k=i;k<len-1;k++) peo[k]=peo[k+1]; printf("删除成功!\n"); len--; //人数减一 } }
时间: 2024-02-14 13:22:31 浏览: 48
这段代码看起来像是一个删除数组中某个元素的代码,其中`len`表示数组的长度,`peo`是存储人员信息的数组,`name`是需要删除的人员的姓名。具体来说,这段代码会遍历整个数组,查找姓名为`name`的人员,如果找到了就将数组中该元素后面的所有元素都向前移动一个位置,相当于删除了该元素。最后更新数组长度`len`,表示人数减一,输出删除成功的信息。
相关问题
#include<bits/stdc++.h> using namespace std; int main() { int m,n,s; cin>>m>>n>>s; char a[m][30],b[m][30]; int t=0; for(int i=1;i<=m;i++) { cin>>a[i]; } int p=1,y=0; for(int i=1;i<=m;i++) { if(i%n==0) p=1; p++; if(p==s) { y++; strcpy(b[t++],a[i]); for(int k=0;k<t;k++) { if(strcmp(a[i],b[k])==0) { strcpy(b[k],a[i+1]); } } } } if(y==0) { cout<<"Keep going..."<<endl; } else { for(int i=0;i<t;i++) { cout<<b[i]<<endl; } } return 0; }改错
这段代码存在一些问题,主要是数组下标越界和字符串处理函数的使用问题。下面是修改后的代码:
```c++
#include<bits/stdc++.h>
using namespace std;
int main() {
int m,n,s;
cin>>m>>n>>s;
string a[m],b[m];
int t=0;
for(int i=0;i<m;i++) // 数组下标从0开始
{
cin>>a[i];
}
int p=s-1,y=0; // p初始值应为s-1
for(int i=p;i<m;i+=n) // i每次加n
{
bool flag=true;
for(int k=0;k<t;k++)
{
if(a[i]==b[k]) // 字符串比较应使用==,而不是strcmp函数
{
flag=false;
break;
}
}
if(flag) // 如果不重复,则加入输出数组b中
{
b[t++]=a[i];
}
else // 如果重复,则将p加1
{
p++;
}
}
if(t==0) // 输出判断应该是t==0
{
cout<<"Keep going..."<<endl;
}
else
{
for(int i=0;i<t;i++)
{
cout<<b[i]<<endl;
}
}
return 0;
}
```
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> struct id { char name[10]; int num; int len; }ID[100]; void swap(struct id* a, struct id* b) { struct id c = *a; *a = *b; *b = c; } void sort(struct id* t, int n) { for (int i = 1; i < n; i++) { for (int j = 1; j < n - i; j++) if (strcmp(t[j].name, t[j + 1].name) > 0) swap(&t[j], &t[j + 1]); } } int main() { int n; int l; scanf("%d", &n); for (int i = 0; i <=n; i++) { scanf("%s%d", ID[i].name, &ID[i].num); ID[i].len = strlen(ID[i].name); } sort(ID, n); for (int i = 0; i <n; i++) { for (int j = 0; j <= ID[i].len; j++) { printf("%c", ID[i].name[j]); } printf(" %d", ID[i].num); printf("\n"); } return 0; }这个代码哪里错了
这个代码有两个问题:
1. 在读入数据时,应该是从 0 到 n-1 进行循环,而不是从 0 到 n。
2. 排序时,应该是从 0 到 n-i-1 进行循环,而不是从 1 到 n-i。
以下是修改后的代码:
```c
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
struct id {
char name[10];
int num;
int len;
}ID[100];
void swap(struct id* a, struct id* b) {
struct id c = *a;
*a = *b;
*b = c;
}
void sort(struct id* t, int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++)
if (strcmp(t[j].name, t[j + 1].name) > 0)
swap(&t[j], &t[j + 1]);
}
}
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s%d", ID[i].name, &ID[i].num);
ID[i].len = strlen(ID[i].name);
}
sort(ID, n);
for (int i = 0; i < n; i++) {
for (int j = 0; j <= ID[i].len; j++) {
printf("%c", ID[i].name[j]);
}
printf(" %d\n", ID[i].num);
}
return 0;
}
```
注意,这里在输出时,应该要在数字后面加上换行符,否则会导致格式错误。