cin>>ST.R->key[i];显示数组下标类型无效
时间: 2024-04-26 07:26:27 浏览: 74
这个问题可能是因为使用了无效的数组下标类型导致的。在这段代码中,ST.R 是一个指向 ElemType 类型的指针,而 key 是 ElemType 结构体中的一个成员,因此需要使用箭头符号 -> 来访问 key 字段。
正确的写法是:`cin >> ST.R[i].key;`
这样可以将输入的值存储到 ST.R 数组中对应位置的 key 字段中。
需要注意的是,这里使用的是数组下标 i,而不是 ST.R->key[i]。因为 ST.R 是一个指向 ElemType 类型的指针,而不是数组名,因此需要使用数组下标来访问其元素。
相关问题
typedef struct{ KeyType key; InfoType otherinfo; }ElemType; typedef struct{ ElemType *R; int length; }SSTable; Status LUT(SSTable ST,KeyType key) {//构造顺序表 int i,n; ST.R=new ElemType[MAXSIZE+1]; if(!ST.R) exit(OVERFLOW); cout<<"请输入二位数的总数:"; cin>>n; printf("请依次输入两位数的数值:\n"); for(i=1;i<=n;i++) cin>>ST.R->key[i]; return OK; }
这段代码是一个构造顺序表的函数,其中包含了以下几个结构体和类型定义:
1. ElemType:表示顺序表中的数据元素类型,包括一个 KeyType 类型的 key 和一个 InfoType 类型的 otherinfo。
2. SSTable:表示顺序表类型,包括一个指向 ElemType 类型的指针 R 和一个 int 类型的 length,表示顺序表的长度。
3. KeyType:表示顺序表中的关键字类型。
4. InfoType:表示顺序表中的其他信息类型。
具体实现如下:
1. 首先,为 SSTable 结构体中的 R 数组动态分配内存空间。
2. 然后,输入二位数的总数 n。
3. 接着,依次输入 n 个两位数的数值,并将其存储到 R 数组中对应位置的 key 域中。
4. 最后,返回 OK 表示构造成功。
需要注意的是,这里的 R 数组是一个指向 ElemType 类型的指针,因此需要使用箭头符号 -> 访问其成员 key。
如果函数返回值 OK 的定义不在这段代码中,可以在程序开头或者其他地方查找。
此外,还需要注意的是,在调用这个函数时,需要传入一个 SSTable 类型的变量作为参数。可以在主函数中定义一个 SSTable 变量,然后将其作为参数传入 LUT 函数中,如下所示:
```
int main() {
SSTable st;
KeyType key;
LUT(st, key);
return 0;
}
```
#include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; typedef struct { int key; //关键字域 }Elemtype; typedef struct { Elemtype R[1000]; int length; }SSTable; int Search_Seq(SSTable ST, int key) { int i; ST.R[0].key = key; for (i = ST.length; ST.R[i].key != key; --i); //从后往前找 return i; } int Search_Bin(SSTable ST, int Key) {//在有序表ST中折半查找其关键字等于key的数据元素。若能找到,则函数值为该元素在表中的位置,否则为0 int low, high,mid;//,length; low = 1; high = ST.length; /*high = ST, length;*/ printf("HELLO"); while (low <= high) { printf("HELLO"); mid = (low + high) / 2; if (Key == ST.R[mid].key) return mid; else if (Key < ST.R[mid].key) high = mid - 1; else low = mid + 1; printf("HELLO"); } //while return 0; } int main() { int n,i,Key; SSTable ST; cout<<"请选择确定需要存入表中的元素个数:\n"; cin >> n; ST.length = n; for (i = 1; i <= n; i++) { cin >> ST.R[i].key; } cout << "请输入Key:"; cin >> Key; printf("顺序查找结果:%d", Search_Seq(ST, Key)); printf("中序查找结果:%d",Search_Bin(ST,Key)); /*cout << "顺序查找,在此顺序表下标为" << Search_Seq(ST, Key) << "处的元素内找到与key相同的元素\n"; cout << "中序查找,在此顺序表下标为" << Search_Bin(ST, Key) << "处的元素内找到与Key相同的元素\n";*/ return 0; }我的代码有些问题,可以帮我找出来并修改吗?
你的代码中存在一些问题:
1. 头文件的引入应该放在最开头,而不是在中间。
2. 使用了命名空间std,因此不应该再用printf,应该使用cout进行输出。
3. 在Search_Bin函数中,使用了printf输出,而不是cout输出。
4. 在Search_Bin函数中,可能会出现死循环的问题。当Key不在有序表ST中时,while循环会一直执行,导致程序卡住。应该添加一个判断条件,当low>high时,说明Key不在ST中,直接返回0。
5. 在主函数中,使用了两次printf输出,没有换行符,应该在末尾添加换行符。
下面是修改后的代码:
```cpp
#include <iostream>
using namespace std;
typedef struct {
int key; //关键字域
} Elemtype;
typedef struct {
Elemtype R[1000];
int length;
} SSTable;
int Search_Seq(SSTable ST, int key) {
int i;
ST.R[0].key = key;
for (i = ST.length; ST.R[i].key != key; --i); //从后往前找
return i;
}
int Search_Bin(SSTable ST, int Key) {
int low, high, mid;
low = 1;
high = ST.length;
while (low <= high) {
mid = (low + high) / 2;
if (Key == ST.R[mid].key) return mid;
else if (Key < ST.R[mid].key) high = mid - 1;
else low = mid + 1;
}
return 0;
}
int main() {
int n, i, Key;
SSTable ST;
cout << "请选择确定需要存入表中的元素个数:" << endl;
cin >> n;
ST.length = n;
for (i = 1; i <= n; i++) {
cin >> ST.R[i].key;
}
cout << "请输入Key:";
cin >> Key;
cout << "顺序查找,在此顺序表下标为" << Search_Seq(ST, Key) << "处的元素内找到与key相同的元素" << endl;
cout << "中序查找,在此顺序表下标为" << Search_Bin(ST, Key) << "处的元素内找到与Key相同的元素" << endl;
return 0;
}
```
希望能帮到你!
阅读全文