【发布时间】:2014-09-06 21:48:38
【问题描述】:
我有一个指向结构数组内结构的指针数组,我想按字母对我的“graph[]”进行排序。
我的问题是对 'struct vertex' 中的 '*vertexes[]' 进行排序。现在我不能在'*vertexes[]'内的每个指针中显示'字母'......
这是带有 PaulMcKenzie 更正的代码:
#include <algorithm> //std::sort()
#include <cstdio> //std::scanf(), std::putchar()
//
struct vertex {
vertex *vertexes[26];
vertex **end; //Do the same as 'size'
unsigned int size;
char letter;
void insert(vertex *dest) { vertexes[size] = dest; ++size; /* or *end = dest; end+=1; */ }
bool empty(void) const { return(this->size == 0); /* or return(vertexes == end); */ }
};
//
bool byLetter(const vertex *A, const vertex &B)
{
return(A->letra < B->letra);
}
//
int main(void)
{
unsigned int n(0), N, A, v, V;
char ini, fim;
vertex graph[26]; //Each one represents a letter of the alphabet
std::scanf("%u ", &N);
while(n++ < N) {
for(v = 0; v < 26; ++v) {
graph[v].size = 0;
graph[v].end = graph[v].vertexes;
graph[v].letter = v+'a';
}
std::scanf("%u %u ", &V, &A);
do {
std::scanf("%c %c ", &ini, &fim);
graph[ini-'a'].insert(&graph[fim-'a']);
} while(--A != 0);
for(v = 0; v < V; ++v) {
if(!graph[v].empty()) {
std::sort(graph[v].vertexes, &graph[v].vertexes[graph[v].size], byLetter);
//Not sure why graph[v] + size is more safe then this...
graph[v].show(); //Problem here
}
}
std::putchar('\n');
}
return(0);
}
//
void vertex::show(void)
{
vertex **p(vertexes); //'p' iterates thought vertexes
while(p != end) { //but I can't access the letter in each pointer
std::putchar(*(*p->vertexes->letter)); // problem here
std::putchar(',');
p+=1;
}
}
//
【问题讨论】:
-
struct vertex *vertexes[26];在这种情况下使用struct表示您正在阅读C材料而不是C++材料。在 C++ 的上下文中不需要struct。 -
std::sort(vertexes, &vertexes[size], byLetter)应该是std::sort(vertexes, vertexes + size, byLetter);,vertexes[size]是等待发生的访问冲突!&graph[i].vertexes[graph[i].tam]也是如此 -
*A->vertexes->letter正在尝试取消引用指针A->vertexes->letter,它甚至无法编译! -
什么是 tam ?是
graph::sort(void)还是vertex::sort(void)? -
我给出了答案,但您应该明确说明您要排序的内容。您在
main中定义了一个图形数组,那么您是否尝试按字符对graph数组进行排序?
标签: c++ arrays pointers struct