#include <bits/stdc++.h> using namespace std; typedef struct{ string s; }tree[101]; int main() { int n; cin>>n; for(int i=1;i<=n;i++){ cin>>tree[i].s; getline(cin,s); } int a[101]={1}; for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ if(str[j]==str[i]){ a[j]++; } } } for(int i=1;i<=n;i++){ cout<<a[i]<<endl; } return 0; }为什么不对呢
时间: 2023-07-16 17:10:36 浏览: 285
这段代码存在一些问题,导致编译错误。首先,你在定义结构体时使用了一个未定义的类型 `string`,应该包含头文件 `<string>` 来解决这个问题。另外,在输入循环中你使用了 `getline(cin, s)`,但是你并没有定义变量 `s`,应该改为 `getline(cin, tree[i].s)`。此外,比较字符串是否相等时,应该使用 `tree[j].s == tree[i].s` 而不是 `str[j] == str[i]`。最后,你输出的数组应该是 `a` 而不是 `str`。下面是修改后的代码:
```cpp
#include <bits/stdc++.h>
using namespace std;
typedef struct {
string s;
} tree[101];
int main()
{
int n;
cin >> n;
cin.ignore(); // 忽略换行符
for (int i = 1; i <= n; i++) {
getline(cin, tree[i].s);
}
int a[101] = { 0 }; // 初始化为0
for (int i = 1; i <= n; i++) {
for (int j = i + 1; j <= n; j++) {
if (tree[j].s == tree[i].s) {
a[j]++;
}
}
}
for (int i = 1; i <= n; i++) {
cout << a[i] << endl;
}
return 0;
}
```
这样修改后,代码应该可以正常编译和运行。
阅读全文