- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要像这样递归地打印结构数组中的数据,
index, numberOfChildern, child[0]...child[numberOfChildern-1]
要注意的是,对于每个 child ,我还需要打印 index, numberOfChildern, child[0]...child[numberOfChildern-1]
。
typedef struct node point;
typedef point **pointsList;
结构:
struct node{
int index; //the order in the instance file
int x;//x coord
int y;//y coord
int parent;//parent in tree when added
int numChildern;//has val 0 -- 8 maybe, but doesn't matter the way I wrote it
int *child;
};
每个结构中的所有值都已正确设置,这是我开始编写以完成任务的不完整方法。
void printStringOfChildern(pointsList list, point *point, int fileNum){
if(point->numChildern == 0)
return;
//print the index
char index[calcNumberOfDigitsInAInt(point->index)+3];
sprintf(index, "%d", point->index);
strcat(index, ", ");
print(index, fileNum);
//print the number of childern
char chidern[calcNumberOfDigitsInAInt(point->numChildern)+3];
sprintf(chidern, "%d", point->numChildern);
strcat(chidern, ", ");
print(chidern, fileNum);
//print the childern
for(int i=0; i<point->numChildern; i++){
char child[calcNumberOfDigitsInAInt(point->child[i])+3];
//was child[i] now point->child[i]
sprintf(child, "%d", point->child[i]);
strcat(child, ", ");
print(child, fileNum);
//print out other childern and their data if there is any
int numChildern = numberOfChildern(list, point -> index);
if(numChildern > 0){
printStringOfChildern(list, list[point->child[i]], fileNum);
}
}
}
你会注意到上面的代码很糟糕而且不完整,但它显示了我的打印功能的使用
下面的 if else block 是我打印到输出的方式,它可能是一个文件或一系列文件的终端。打印功能和这个 if else block 已经过测试,并证明可以工作。 inOutType 是一个全局变量,outputFileName 也是。 fileIndex 仅在打印到多个文件的情况下使用,并且在打印到多个文件的情况下,无论有多少文件,都会调用此方法。这是打印函数
if(inOutType == 1 || inOutType == 2){
printLineToOutPut(output, outputFileName, inOutType);
}else{
printToAInstanceFile(output, fileIndex);
}
我在编辑中所做的就是更新样本,然后写下这个
Output format:
index, numberOfChildern, child[i]. If child[i] has children then index, numberOfChildern, indexOf(child[i]), numberOfChildernOf(child[i]), child[i]OfChild[i].....
方法是这样执行的
for(int j=0; j<maxNumberOfPoints; j++)
printStringOfChildern(listOfListOfPoints[i], listOfListOfPoints[i][j], i);
最佳答案
在没有输出应该是什么样子的清晰示例的情况下,这里显示了一个代码版本。请注意,我只是创建了 32 个字符长的缓冲区,而不是花时间计算它们必须到底有多长。这不是很多内存,但足以完成手头的任务。此外,没有数据——我发明了一些:
Index 0: 3 children
Index 1: 0 children
Index 2: 2 children
Index 4: 0 children
Index 5: 0 children
Index 3: 0 children
不需要任何其他数据;未使用问题中结构的 x
、y
和 parent
成员——消除不相关是创建 MCVE 的一部分( Minimal, Complete, Verifiable Example ).
我忽略了“fileNum”参数;打印简单且仅针对标准输出。如果需要,可以很容易地恢复打印到文件。我还使用了一种受 JSON 启发的表示法来报告数据,将数组包含在 […]
中,除了 {…}
中的层次结构顶部外,还包含单个点。
#include <stdio.h>
#include <string.h>
typedef struct node point;
typedef point **pointsList;
struct node
{
int index; // the order in the instance file
// int x;//x coord
// int y;//y coord
// int parent;//parent in tree when added
int numChildren;// has val 0 -- 8 maybe, but doesn't matter the way I wrote it
int *child;
};
static inline void print(const char *str)
{
printf("%s", str);
}
static void printStringOfChildren(pointsList list, point *point)
{
// print the index
char index[32];
sprintf(index, "%d", point->index);
strcat(index, ", ");
print(index);
// print the number of children
char children[32];
sprintf(children, "%d", point->numChildren);
strcat(children, ", ");
print(children);
// print the children
print("[");
for (int i = 0; i < point->numChildren; i++)
{
if (i > 0)
print(",");
print(" { ");
printStringOfChildren(list, list[point->child[i]]);
print(" }");
}
if (point->numChildren > 0)
print(" ");
print("]");
}
int main(void)
{
point *list[] =
{
&(point){ 0, 3, (int[]){ 1, 2, 3 } },
&(point){ 1, 0, 0 },
&(point){ 2, 2, (int[]){ 4, 5 } },
&(point){ 3, 0, 0 },
&(point){ 4, 0, 0 },
&(point){ 5, 0, 0 },
};
printStringOfChildren(list, list[0]);
putchar('\n');
return 0;
}
输出:
0, 3, [ { 1, 0, [] }, { 2, 2, [ { 4, 0, [] }, { 5, 0, [] } ] }, { 3, 0, [] } ]
还有许多其他方法可以进行输出。 sprintf()
和 strcat()
的整个业务都是假的——你完全可以在我的场景中使用 printf()
,或者 fprintf()
在更一般的情况下,格式化数据,进一步减小程序的大小。
关于c - 递归地打印结构数组中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41069604/
我目前正在尝试基于哈希表构建字典。逻辑是:有一个名为 HashTable 的结构,其中包含以下内容: HashFunc HashFunc; PrintFunc PrintEntry; CompareF
如果我有一个指向结构/对象的指针,并且该结构/对象包含另外两个指向其他对象的指针,并且我想删除“包含这两个指针的对象而不破坏它所持有的指针”——我该怎么做这样做吗? 指向对象 A 的指针(包含指向对象
像这样的代码 package main import "fmt" type Hello struct { ID int Raw string } type World []*Hell
我有一个采用以下格式的 CSV: Module, Topic, Sub-topic 它需要能够导入到具有以下格式的 MySQL 数据库中: CREATE TABLE `modules` ( `id
通常我使用类似的东西 copy((uint8_t*)&POD, (uint8_t*)(&POD + 1 ), back_inserter(rawData)); copy((uint8_t*)&PODV
错误 : 联合只能在具有兼容列类型的表上执行。 结构(层:字符串,skyward_number:字符串,skyward_points:字符串)<> 结构(skyward_number:字符串,层:字符
我有一个指向结构的指针数组,我正在尝试使用它们进行 while 循环。我对如何准确初始化它并不完全有信心,但我一直这样做: Entry *newEntry = malloc(sizeof(Entry)
我正在学习 C,我的问题可能很愚蠢,但我很困惑。在这样的函数中: int afunction(somevariables) { if (someconditions)
我现在正在做一项编程作业,我并没有真正完全掌握链接,因为我们还没有涉及它。但是我觉得我需要它来做我想做的事情,因为数组还不够 我创建了一个结构,如下 struct node { float coef;
给定以下代码片段: #include #include #define MAX_SIZE 15 typedef struct{ int touchdowns; int intercepti
struct contact list[3]; int checknullarray() { for(int x=0;x<10;x++) { if(strlen(con
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Empty “for” loop in Facebook ajax what does AJAX call
我刚刚在反射器中浏览了一个文件,并在结构构造函数中看到了这个: this = new Binder.SyntaxNodeOrToken(); 我以前从未见过该术语。有人能解释一下这个赋值在 C# 中的
我经常使用字符串常量,例如: DICT_KEY1 = 'DICT_KEY1' DICT_KEY2 = 'DICT_KEY2' ... 很多时候我不介意实际的文字是什么,只要它们是独一无二的并且对人类读
我是 C 的新手,我不明白为什么下面的代码不起作用: typedef struct{ uint8_t a; uint8_t* b; } test_struct; test_struct
您能否制作一个行为类似于内置类之一的结构,您可以在其中直接分配值而无需调用属性? 前任: RoundedDouble count; count = 5; 而不是使用 RoundedDouble cou
这是我的代码: #include typedef struct { const char *description; float value; int age; } swag
在创建嵌套列表时,我认为 R 具有对列表元素有用的命名结构。我有一个列表列表,并希望应用包含在任何列表中的每个向量的函数。 lapply这样做但随后剥离了列表的命名结构。我该怎么办 lapply嵌套列
我正在做一个用于学习目的的个人组织者,我从来没有使用过 XML,所以我不确定我的解决方案是否是最好的。这是我附带的 XML 文件的基本结构:
我是新来的 nosql概念,所以当我开始学习时 PouchDB ,我找到了这个转换表。我的困惑是,如何PouchDB如果可以说我有多个表,是否意味着我需要创建多个数据库?因为根据我在 pouchdb
我是一名优秀的程序员,十分优秀!